我想将Haskell函数提升为更高阶的lambda微积分编码。这几乎是从Oleg的Typed Tagless Final编码逐字记录的。 class Lam r where
emb :: a -> r a
(^) :: r (r a -> r a) -> (r a -> r a)
lam :: (r a -> r a) -> r (r a -> r a)
inst
莱昂纳多博尔赫斯撰写了一篇优秀的文章"Functional Composition With Monads, Kleislis and Functors"。 他在文中评论道: 马克指出,我认为电梯是几乎一样的地图,并反转参数。 这意味着,这样的: val f = Functor[Option].lift(parts) compose make
可重构为: val g = make(_:Int)
我试图采用ExceptT a (StateT A M),对于某些具体类型A和monad M,并将它们包裹到我的新自定义monads中。 首先我确定了StateT A M在其他环境中经常出现,因此我决定这将是最好的单独包装在一个单子M1,然后包装成ExceptT a M1M2。 期望的特性是使MonadStateM1和M2实例和类M(让我们假设它被称为MyMonadClass)。 M2也应该是Mon
所以我有这样的代码 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
import MonadA
data A = A
newtype MonadA a => MyStateT a b { runMyStateT :: StateT A a b }
deriving (Functor, Applicative, Monad, MonadI