haskell 中的递归仿函数实例
Recursive functor instance in haskell
我遇到了 haskell 关于递归 Functor 实例的问题。
data List x = Hol | Hoofd x (List x)
deriving (Show,Eq,Ord)
instance Functor List where
fmap f (Hoofd x (Hoofd x)) = Hoofd (f x) Hoofd(f x)
fmap f Hol = Hol
fmap f Hoofd x (Hol) = Hoofd (f x)
我制作了一个数据类型列表,我需要在其中添加 Functor Fmap 实例,我尝试在数据类型派生 (Functor) 中使用,但我返回一个错误:无法派生 Functor 必须使用 DeriveFunctor我也没看懂...
请帮忙
有两种方法可以为某种类型创建 class-实例:或者
使用 deriving
子句。这仅适用于简单的 classes,其中有 一种明显的方式 来定义实例的方法。 In Haskell98, these classes were only Eq
, Ord
, Enum
, Bounded
, Show
, and Read
。到目前为止,该语言已经发展了很多,GHC 现在可以派生更多 classes,但它总是需要打开 语言扩展 。特别是,要导出 Functor
,您需要输入
{-# LANGUAGE DerivingFunctor #-}
在源文件的顶部,或者用
调用compiler/intepreter
$ ghc -XDeriveFunctor
(我不推荐后者;如果你这样做,你的文件将不会“自给自足”。)
启用该扩展后,您只需编写
data List x = Hol | Hoofd x (List x)
deriving (Show, Eq, Ord, Functor)
自己写实例。这就是您在代码片段中所做的,与 deriving
无关。您的实施有问题,这是您可能会提出的问题,但您应该包括当前出现问题的信息。
编辑
发现问题是我的数据类型是递归的,但我的 Functor 实例不是。
data List x = Hol | Hoofd x (List x)
deriving (Show,Eq,Ord)
instance Functor List where
fmap f Hol = Hol
fmap f (Hoofd x rest) = Hoofd (f x) (fmap f rest)
现在可以了,如果有另一个元素需要处理,它将被发送回实例,直到注意到处理
我遇到了 haskell 关于递归 Functor 实例的问题。
data List x = Hol | Hoofd x (List x)
deriving (Show,Eq,Ord)
instance Functor List where
fmap f (Hoofd x (Hoofd x)) = Hoofd (f x) Hoofd(f x)
fmap f Hol = Hol
fmap f Hoofd x (Hol) = Hoofd (f x)
我制作了一个数据类型列表,我需要在其中添加 Functor Fmap 实例,我尝试在数据类型派生 (Functor) 中使用,但我返回一个错误:无法派生 Functor 必须使用 DeriveFunctor我也没看懂...
请帮忙
有两种方法可以为某种类型创建 class-实例:或者
使用
deriving
子句。这仅适用于简单的 classes,其中有 一种明显的方式 来定义实例的方法。 In Haskell98, these classes were onlyEq
,Ord
,Enum
,Bounded
,Show
, andRead
。到目前为止,该语言已经发展了很多,GHC 现在可以派生更多 classes,但它总是需要打开 语言扩展 。特别是,要导出Functor
,您需要输入{-# LANGUAGE DerivingFunctor #-}
在源文件的顶部,或者用
调用compiler/intepreter$ ghc -XDeriveFunctor
(我不推荐后者;如果你这样做,你的文件将不会“自给自足”。)
启用该扩展后,您只需编写
data List x = Hol | Hoofd x (List x) deriving (Show, Eq, Ord, Functor)
自己写实例。这就是您在代码片段中所做的,与
deriving
无关。您的实施有问题,这是您可能会提出的问题,但您应该包括当前出现问题的信息。
编辑
发现问题是我的数据类型是递归的,但我的 Functor 实例不是。
data List x = Hol | Hoofd x (List x)
deriving (Show,Eq,Ord)
instance Functor List where
fmap f Hol = Hol
fmap f (Hoofd x rest) = Hoofd (f x) (fmap f rest)
现在可以了,如果有另一个元素需要处理,它将被发送回实例,直到注意到处理