我希望我的应用程序能有一个队列。从我读到的资料来看,Data.Sequence 是生产代码中最好的选择。为了保持我的代码优雅、符合惯例和总体上更像 Haskell,把 Data.Sequence 包装在自己的队列数据类型中以隐藏不需要的功能是否有问题呢?
没有任何问题 - 实际上,这正是newtype
的用途!
理想情况下,你的类型应该反映你的意图 - 无论是谁阅读你的代码(包括你自己在未来,当你忘记你做了什么和为什么时),都应该能够知道一个类型是用来做什么的。
因此,即使你的队列只是一个Sequence
,将其包装成自己的Queue
newtype将向(人类)读者表明“这个特定序列是用于排队的”,除了隐藏非必需功能和防止混淆值之外(即不小心传递另一个Sequence
到期望队列的函数中),还带来了好处。