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

pap*_*uck 2 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
Run Code Online (Sandbox Code Playgroud)

我收到以下错误。看来我无法返回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)
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 8

实际上,您并未创建newtype用于包装的Seq a,而是构造了一个类型MyQueue a为且其数据构造函数 Seq采用的类型a。因此,它基本上可以存储任何内容。

您可能想定义一个MyQueue包含的数据构造函数Seq a,例如:

newtype MyQueue a = MyQueue (Seq a)
Run Code Online (Sandbox Code Playgroud)

然后,您可以将您定义empty为:

empty :: MyQueue a
empty = MyQueue Data.Sequence.empty
Run Code Online (Sandbox Code Playgroud)

需要注意的是,MyQueue粗体是数据的构造,而MyQueue之后::类型构造