use*_*970 10 haskell monad-transformers
我想知道这个 monad 在 Haskell 生态系统中是否有标准名称
data Delay a = Wait (Delay a) | Done a deriving (Show, Eq, Functor)
instance Monad Delay where
return a = Done a
(Done a) >>= f = f a
(Wait da) >>= f = Wait (da >>= f)
Run Code Online (Sandbox Code Playgroud)
这很有用,因此可以“暂停”可能的非终止计算。
最终目标是将它与它结合起来,LogicT以便我可以搜索可能的非终止函数。我最初推出了自己的实现,但簿记失控了,特别是因为我在混合中有其他一元效应。
che*_*ner 10
Delay看起来它与库中的Iterfrom是同构Control.Monad.Trans.Iter的free。
newtype IterT m a = IterT { runIterT :: m (Either a (IterT m a)) }
type Iter = IterT Identity
instance Monad m => Monad (IterT m) where
return = pure
IterT m >>= k = IterT $ m >>= either (runIterT . k) (return . Right . (>>= k))
fail _ = never
Run Code Online (Sandbox Code Playgroud)
具体而言,Done a对应于IterT Identity (Left a)和Wait (Delay a)到IterT Identity (Right (IterT Identity a))。
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |