下面是代码。我在一定程度上理解了applicative、functor、traversable和monad。迭代器、yield 类型以及yield 函数是我最难理解的。例如,Iterator 中的 ior 和 Yield 中的 iora 是什么?traverseY 到底做了什么以及签名的含义是什么?而 Monad Cont 在这里的应用方式也让我很困惑。感谢您的阅读,如有任何意见,我们将不胜感激。
import Control.Monad.Cont
import Control.Monad.Random
import System.Random.Shuffle
data Iterator i o r =
Result r
| Susp o (i -> Iterator i o r)
--------------------------------------------------------------------------------------------
newtype Yield i o r a = Yield { unY :: Cont (Iterator i o r) a }
instance Functor (Yield i o r) where
fmap f (Yield m) = Yield (fmap f m)
instance Applicative (Yield i o r) where
pure …Run Code Online (Sandbox Code Playgroud) haskell ×1