我一直在尝试根据一些JavaScript视频在Haskell中实现Promise。虽然我已经这样做了
data Promise a = PendingPromise a | ResolvedPromise a | BrokenPromise deriving( Show )
class Future p where
later :: (b -> c) -> p (a -> b) -> p (a -> c)
resolve :: p (a -> b) -> a -> p b
instance Future Promise where
later g (PendingPromise f) = PendingPromise (g . f)
resolve (PendingPromise f) a = ResolvedPromise (f a)
我想知道是否有类指定了later
方法,如果有运算符则更好。我需要一些理想的做法
(+2) someOperator Just (+5) --> Just (+7)
这是一个函数和一个包含函数的包装器,并返回一个包含函数组合的包装器。
答案 0 :(得分:3)
标准库中没有与later
和resolve
完全匹配的运算符,但later f p
可以写为
(f .) <$> p
(其中p
是Functor
的实例)。也可以使用Functor
函数实例将上述内容写为
fmap f <$> p
此外,resolve p a
可以写为
p <*> pure a
(其中p
是Applicative
)的实例。
<$>
模块导入