AK
Фишка этого Fix, в лёгком написании рекурсивных функций. Пример:
toList : Maybe (List ()) -> List ()
toList m =
case m of
Just x -> () :: x
Nothing -> []
main = text <| Debug.toString <| maybeCata toList two
Size: a a a
AK
toList : Maybe (List ()) -> List ()
toList m =
case m of
Just x -> () :: x
Nothing -> []
main = text <| Debug.toString <| maybeCata toList two
AK
IR
AK
(
G
AK
G
AK
G
AK
https://gist.github.com/kapranov-anton/1b913f855850813d7811800d6be4d969
G
AK
cata, а потом разные варианты что хочется получить при обходе дерева.
(
(
main = text <| Debug.toString <| maybeCata toInt two
type FixMaybe = FixMaybe (Maybe FixMaybe)
maybeCata : (Maybe a -> a) -> FixMaybe -> a
maybeCata alg (FixMaybe node) =
alg (Maybe.map (maybeCata alg) node)
toInt : Maybe Int -> Int
toInt m =
case m of
Just x -> x + 1
Nothing -> 0
zero = FixMaybe Nothing
one = FixMaybe (Just zero)
two = FixMaybe (Just one)
AK
G
https://gist.github.com/kapranov-anton/1b913f855850813d7811800d6be4d969
AK
G
(