尝试使用newtype传递现有数据类型作为我自己的数据类型

时间:2019-06-16 12:49:21

标签: haskell

我正在尝试将Data.Sequence包装在自己的newtype中,以隐藏不必要的功能。

MyQueue.hs(省略了某些部分):

00 import Data.Sequence

10 newtype MyQueue a = Seq a

23 empty :: MyQueue a
24 empty = Data.Sequence.empty

我收到以下错误。看来我无法返回Seq类型并将其作为我自己的类型传递。但是,如何将自己的函数映射到Data.Sequence中的函数?

MyQueue.hs:24:9: error:
    • Couldn't match expected type ‘MyQueue a’
                  with actual type ‘Seq a4’
    • In the expression: Data.Sequence.empty
      In an equation for ‘empty’: empty = Data.Sequence.empty
    • Relevant bindings include
        empty :: MyQueue a (bound at MyQueue.hs:24:1)

1 个答案:

答案 0 :(得分:8)

您实际上并没有创建newtype来包装Seq a,而是构造了一个具有数据构造函数的类型MyQueue a Seq需要a。因此它基本上可以存储任何东西。

您可能想定义一个包含MyQueue的{​​{1}}数据构造函数,例如:

Seq a

然后,您可以将newtype MyQueue a = MyQueue (Seq a)定义为:

empty

请注意,粗体中的empty :: MyQueue a empty = MyQueue Data.Sequence.empty是数据构造函数,而MyQueue之后的MyQueue类型构造器