--{-# LANGUAGE DatatypeContexts #-}
class TypeFunctor f where
mapf :: (a-> b)->(f a-> fb)
data TypeFunctor f => Fix f = In (f (Fix f))
out :: TypeFunctor f => Fix f -> f (Fix f)
out (In x) = x
fold :: TypeFunctor f => (f a -> a) -> (Fix f -> a)
fold f = f . mapf (fold f) . out
我收到以下错误消息:
错误: 非法数据类型上下文(使用DatatypeContexts):TypeFunctor f => | 4 | data TypeFunctor f =>修正f = In(f(Fix f))|
^^^^^^^^^^^^^
什么是问题?
编辑:
newtype Fix f = In (f (Fix f))
out :: Functor f => Fix f -> f (Fix f)
out (In x) = x
fold :: Functor f => (f a -> a) -> (Fix f -> a)
fold f = f . fmap (fold f) . out
答案 0 :(得分:2)
首先,您对扩展程序进行了评论。这没有任何作用:
-- {-# LANGUAGE DatatypeContexts #-}
这会启用DatatypeContexts
扩展程序:
{-# LANGUAGE DatatypeContexts #-}
其次,正如警告所示,DatatypeContexts
不应再使用了。相反,函数应该需要与它们相关的约束。