Перечисления значений бесконечных множеств.

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 ( Read more... )

math, haskell, fp

Leave a comment

mibori April 25 2010, 21:57:30 UTC
Вот так работает для любых:
instance (Dom a, Dom b) => Dom (a, b) where
dom = diagonal [[(a, b) | a <- dom] | b <- dom]

diagonal :: [[a]] -> [a]
diagonal = concat . stripe where
stripe [] = []
stripe ([]:xss) = stripe xss
stripe ((x:xs):xss) = [x] : zipCons xs (stripe xss)

zipCons [] ys = ys
zipCons xs [] = map (:[]) xs
zipCons (x: xs) (y: ys) = (x: y): zipCons xs ysdiagonal определена в Control.Monad.Omega

Reply


Leave a comment

Up