haskell – 如何使用Pragma依赖关系在ghci中正确定义数据类型?
发布时间:2020-12-14 04:49:19 所属栏目:百科 来源:网络整理
导读:我试图在 Haskell Map for Trees的hammar的答案中定义一个Tree类型的fmap 他的定义来自functor,它使用了pragma,我只是模糊地熟悉它.他的定义是 {-# LANGUAGE DeriveFunctor #-}data Tree a = Leaf a | Node (Tree a) (Tree a) deriving (Functor,Show) 我无
我试图在
Haskell Map for Trees的hammar的答案中定义一个Tree类型的fmap
他的定义来自functor,它使用了pragma,我只是模糊地熟悉它.他的定义是 {-# LANGUAGE DeriveFunctor #-} data Tree a = Leaf a | Node (Tree a) (Tree a) deriving (Functor,Show) 我无法在GHCI中使用pragma和定义.以下是我的三次错误尝试,我将不胜感激任何反馈! 第一次尝试: Prelude> {-# LANGUAGE DeriveFunctor #-} Prelude> data Tree a = Leaf a | Node (Tree a) (Tree a) Prelude> deriving (Functor,Show) <interactive>:30:5: parse error on input ‘deriving’ 第二次尝试: Prelude> {-# LANGUAGE DeriveFunctor #-} Prelude> data Tree a = Leaf a | Node (Tree a) (Tree a) deriving (Functor,Show) <interactive>:32:57: Can't make a derived instance of ‘Functor Tree’: You need DeriveFunctor to derive an instance for this class In the data declaration for ‘Tree’ 第三次尝试: Prelude> :{ Prelude| {-# LANGUAGE DeriveFunctor #-} Prelude| data Tree a = Leaf a | Node (Tree a) (Tree a) Prelude| deriving (Functor,Show) Prelude| :} <interactive>:35:1: parse error on input ‘data’ 解决方法
在GHCi中,您设置了pragma
with
:set :
Prelude> :set -XDeriveFunctor 由于data子句跨越多行,因此可以在:{和:}之间声明: Prelude> :{ Prelude| data Tree a = Leaf a | Node (Tree a) (Tree a) Prelude| deriving (Functor,Show) Prelude| :} 现在它应该工作(在本地测试).我们可以例如执行fmap: Prelude> fmap (+1) (Node (Leaf 12) (Leaf 25)) Node (Leaf 13) (Leaf 26) 尝试失败的说明: >第一个失败是因为您的数据子句跨越多行,因此您应该放入一行,或使用某种分组.不过,你没有启用编译指示,所以这里有两个错误;>现在data子句没有问题,但你不能启用像这样的pragma;和>再次,pragma是问题所在. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |