using System; using Monad; using Monad.Parsec; using UnityEngine; using UnityEngine.Assertions; public class TryMonad : MonoBehaviour { private void Start() { Debug.Log(Test()); } private Monad.Try DoSomething(int value) { return () => value + 1; } private Monad.Try DoSomethingError(int value) { if (value > 10) { return () => value; } return () => throw new Exception("Require value is greater than 10!"); } private Monad.Try DoNotEverEnterThisFunction(int value) { return () => value + 1000; } private Monad.Try TryDoingBusiness(int value) { if (value > 100) { return () => value; } return () => throw new Exception("not valid value!"); } public string Test() { var monad = from val1 in DoSomething(10) from val2 in DoSomethingError(val1) from val3 in DoNotEverEnterThisFunction(val2) select val3; var result1 = DoSomethingError(1)(); var result = monad(); var result2 = DoSomethingError(1) .Match( Success: v => v, Fail: err => -1 ); Debug.Log("result2: " + result2); return result.IsFaulted ? result.Exception.Message : result.Value + ""; } }