【发布时间】:2019-04-28 19:05:37
【问题描述】:
我正在编写一段使用 Traversable 抽象的 Haskell 代码。在这个抽象背后,我希望能够隐藏所有常规的可遍历结构,如列表、树、地图等,特殊情况 Data.Functor.Identity.Identity 作为包含单个值的基本结构。我还想介绍一个“空”结构的情况。这种“空”的可遍历实例是否存在?也许它已经由任何库提供?
我第一次(也许是天真的)尝试定义这样的实例如下。有意义吗?
data Empty a = Empty
instance Functor Empty where
fmap _ _ = Empty
instance Foldable Empty where
foldr _ init _ = init
instance Traversable Empty where
sequenceA _ = pure Empty
【问题讨论】:
-
次要:注意“空”可能是一个误导性的名称,因为
Empty a有一个值,即Empty。有人可能会期望空类型没有(非底部)值,例如库中的Void,或者(使用 GHC 扩展)data Empty a没有任何构造函数。
标签: haskell traversable