构造参数化数据类型

时间:2017-05-30 11:20:11

标签: haskell

我正在尝试在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

为什么?我究竟做错了什么?

2 个答案:

答案 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)