lamb/examples/monads/identity_monad.lamb

20 lines
777 B
Plaintext

-- The Identity monad is very simple - it wraps a value, and then when bind is called it applies that value
-- to the function, and then the result is the new Identity. To get at the value, use runIdentity.
-- Since we're dynamically typed and we don't have subtyping, we use a pair to identify Identities.
--
-- This probably doesn't serve a purpose right now, except to show off monads.
return(x) -> ("identity", x). -- wrap a value
bind(("identity", x), f) -> f(x). -- apply a value
runIdentity(("identity", x)) -> x. -- unwrap a value
-- equivalent to 10 * 4 + 2, but in monadic form (yay!)
forty_two = bind(return(10), \x ->
bind(return(x*4), \y ->
return(y + 2)
)
).
-- print the representation and the actual value
print(forty_two).
print(runIdentity(forty_two)).