gpt4 book ai didi

haskell - Monad 是否有标准名称(和库实现)将计算隐藏在构造函数后面?

转载 作者:行者123 更新时间:2023-12-02 01:50:14 24 4
gpt4 key购买 nike

我想知道这个 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)
它很有用,因此可以“暂停”可能的非终止计算。
最终目标是将其与 LogicT 结合起来。所以我可以搜索可能的非终止函数。我最初推出了自己的实现,但簿记失控了,特别是因为我在混合中有其他单子(monad)效果。

最佳答案

Delay看起来它与 Iter 同构来自 Control.Monad.Trans.Iterfree图书馆。

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
具体来说, Done a对应于 IterT Identity (Left a)Wait (Delay a)IterT Identity (Right (IterT Identity a)) .

关于haskell - Monad 是否有标准名称(和库实现)将计算隐藏在构造函数后面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63378116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com