data S a = S a (S a)
headS (S x _) = x
tailS (S _ x) = x
toList (S x xs) = x : toList xs
instance Functor S where
fmap f (S x xs) = S (f x) (fmap f xs)
instance Monad S where
return x = S x (return x)
m >>= f = joinS $ fmap f m
where
joinS (S (S x _) s) = S x (joinS (fmap tailS s))
Все три закона работают. Выбираем диагональные элементы (правда меня коробит, что элементы теряются). Об этом шла речь?
no subject
Все три закона работают. Выбираем диагональные элементы (правда меня коробит, что элементы теряются). Об этом шла речь?