在Haskell中应用某些运算符

时间:2014-05-27 06:32:42

标签: javascript haskell

我一直在尝试根据一些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)

这是一个函数和一个包含函数的包装器,并返回一个包含函数组合的包装器。

1 个答案:

答案 0 :(得分:3)

标准库中没有与laterresolve完全匹配的运算符,但later f p可以写为

(f .) <$> p

(其中pFunctor的实例)。也可以使用Functor函数实例将上述内容写为

fmap f <$> p

此外,resolve p a可以写为

p <*> pure a

(其中pApplicative)的实例。

可以从<$>模块导入

<*>pureControl.Applicative