我想换一个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)
实际上,您并未创建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.emptyRun Code Online (Sandbox Code Playgroud)
需要注意的是,MyQueue在粗体是数据的构造,而MyQueue之后::是类型构造。
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |