“空”可遍历-是否有意义,是否在任何库中提供?

时间:2019-04-28 19:05:37

标签: haskell traversable

我正在编写一段使用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

1 个答案:

答案 0 :(得分:13)

base 中的类型而言,Proxy就是这样。 Const ()也可以。 (也有U1,但这是泛型机制的一部分,在其他情况下可能会有点不合时宜。)