Apr 25, 2010 01:13
Попытаюсь объяснить, что я хочу, поскольку не знаю, в каком разделе математики копать.
Идея выглядит так: class Dom a where dom :: [a]
Возьмем тип Bool. Для него будет dom = [False, True] .
Возьмем Maybe Bool. Для него dom = [Nothing, Just False, Just True] .
Теперь будем брать потенциально бесконечные множества.
Например, Integer. Для него dom = [0, -1, 1, -2, 2 ..] .
Перебирая последовательно элементы этого бесконечного списка мы гарантированно дойдем до любого значения из множества Integer.
Хорошо. Теперь [Bool] .
instance Dom [Bool] where
dom = [ [],
[False], [True],
[False, False], [False, True], [True, False], [True, True],
.. ]Проблемы не возникает потому, что dom для Bool - это конечное множество. С этим списком мы гарантированно дойдем до любого значения [Bool] .
Как можно определить instance Dom [Integer] ?
Существуют ли такие определения для instance Dom a => Dom [a] и instance (Dom a, Dom b) => Dom (a, b) в общем виде?
math,
haskell,
fp