【发布时间】:2013-03-04 00:55:43
【问题描述】:
我正在尝试将 IResult monad 从 attoparsec 解构为几部分。这里是IResult
data IResult t r = Fail t [String] String
| Partial (t -> IResult t r)
| Done t r
这感觉应该是效果、“偏袒”和失败的结合。如果失败仅表示为Either ([String], String),那么偏颇性可能是
data Partiality t a = Now a | Later (t -> Partiality t a)
instance Monad (Partiality t) where
return = pure
(Now a) >>= f = f a
(Later go) >>= f = Later $ \t -> go t >>= f
class MonadPartial t m where
feed :: t -> m a -> m a
final :: m a -> Bool
instance MonadPartial t (Partiality t) where
feed _ (Now a) = Now a
feed t (Later go) = go t
final (Now _) = True
final (Later _) = False
(当你使用Partiality ()时,它的名字来自a paper by Danielsson)
我可以使用 Partiality 作为基本 monad,但是有 PartialityT monad 转换器吗?
【问题讨论】:
-
Partiality t的 monad 实例是什么? -
添加到主要问题中。