LINUX.ORG.RU

Автоматическая генерация хелперов для алгебраических типов

 ,


0

2

Крайне напрягает необходимость писать вот такие нагромождения вручную (по 3 штуки для каждого конструктора).

Между тем, подобные названия функций - это уже стандарт де-факто. Может есть какой-нибудь способ заставить GHC это делать автоматически?

isApple (Apple _) = True
isApple _ = False

getApple (Apple t) = t
getApple _ = error("Not an Apple")

fromApple (Apple t) = Just t
fromApple _ = Nothing
★★★

emerge dev-haskell/derive

or

cabal install derive
qnikst ★★★★★ ()

Не то чтобы я наезжаю, но такие функции выглядят как-то не очень идиоматично. Они вообще нужны?

Выглядит больше как попытка перетащить в хаскель дух C++.

dmand ()
Ответ на: комментарий от dmand

Не то чтобы я наезжаю, но такие функции выглядят как-то не очень идиоматично. Они вообще нужны?

+1.

Не лучше ли сделать отдельные типы, общие функции вынести в тайпкласс?

hateyoufeel ★★★★★ ()

это уже стандарт де-факто.
fromApple (Apple t) = Just t

Это где from -> Just ..? А то fromJust и fromLeft (MissingH) - частичные. from - там, где у тебя get. А вместо «from» appleToMaybe: как listToMaybe и leftToMaybe (either).

anonymous ()
Ответ на: комментарий от anonymous

// а get - скорее селектор для структуры (*), а не «disjoint» (+).

anonymous ()

import Control.Lens

makePrisms "Fruit

anonymous ()

можешь в TH нагенерить всё, что нужно.

Вот мой велосипед, но я в тот момент не знал про винил рекордс, ниасилил ленсы и прочие модные имеющиеся штучки.

yoghurt ★★★★★ ()

Вот соглашусь с предыдущими ораторами. Нахрена тебе такие функции?

Miguel ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.