【发布时间】:2018-12-29 04:22:27
【问题描述】:
在为Cont 实现 Applicative 实例时出现以下错误。
无法将预期类型“r”与实际类型“Cont r b”匹配,“r”是 由 ... 绑定的刚性类型变量
newtype Cont r a = Cont {(>>-) :: (a -> r) -> r}
instance Functor (Cont r) where
-- fmap :: (a -> b) -> (Cont r) a -> (Cont r) b
fmap f (Cont cps_a) = Cont $ \cps -> cps_a (cps . f)
instance Applicative (Cont r) where
-- pure :: a -> Cont r a
pure x = Cont ($ x)
-- (<*>) Cont r (a -> b) -> Cont r a -> Cont r b
(Cont cps_f) <*> cont_cps_a = cps_f (\f -> fmap f cont_cps_a)
我正在尝试使用fmap 定义(<*>),从左侧cps 值中提取f,然后在右侧cps 值上提取fmap f。我不确定我在哪里犯了错误。
【问题讨论】:
-
您知道
<*>不会将其结果包装在Cont中吗?
标签: haskell continuation-passing