«Пустой» проходимый - имеет ли это смысл, есть ли в какой-нибудь библиотеке? - PullRequest
6 голосов
/ 28 апреля 2019

Я пишу кусок кода на Haskell, который использует абстракцию Traversable.За этой абстракцией я хочу иметь возможность скрыть все обычные проходимые структуры, такие как списки, деревья, карты и т. Д., В особом случае 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 Ответ

13 голосов
/ 28 апреля 2019

Что касается ввода в base , то Proxy именно так. Const () также будет работать. (Существует также U1, но это является частью механизма генериков и может показаться немного неуместным в других контекстах.)

...