我正在尝试在Haskell中定义数据类型。将调用此数据类型 节点。它将能够包含参数类型a或Nothing。我这样定义了:
data Node a = Node (Maybe a) deriving (Show)
当我在GHC中加载它时,以下工作 Node Nothing
但是当我输入这个例子时 节点(6)
我收到以下错误:
Non type-variable argument in the constraint: Num (Maybe a)
(Use FlexibleContexts to permit this)
When checking that ‘it’ has the inferred type
it :: forall a. Num (Maybe a) => Node a
为什么?我究竟做错了什么?
答案 0 :(得分:5)
语句data Node a = Node (Maybe a) deriving (Show)
创建类型为Node :: Maybe a -> Node a
的数据构造函数(函数),换句话说,您需要将类型Maybe a
的值传递给此函数。
您已通过6
Maybe a
类型。
相反,您可以传递Just 6
值,如下所示:
Node (Just 6)
。
答案 1 :(得分:4)
您已使用Maybe
定义了数据类型,因此必须将值包装在Just
中:
Node (Just 6).
如果您只想要一个可以为空或已定义值的类型,请按以下方式定义:
data Node b = Empty | Node b deriving (Show)