//@NO-IMPLICIT-PRELUDE //! The identity functor and monad. let { Functor } = import! std.functor let { Applicative } = import! std.applicative let { Monad } = import! std.monad type Identity a = a let functor : Functor Identity = { map = \f m -> f m, } let applicative : Applicative Identity = { functor, apply = \mf m -> mf m, wrap = \value -> value, } let monad : Monad Identity = { applicative, flat_map = \f m -> f m, } { Identity, functor, applicative, monad }