我正在尝试将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)
答案 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
是类型构造器。