haskell - я не знаю
module Main where
class Ff f where
ffmap :: (a -> b) -> (f a -> f b)
instance Ff [] where
ffmap f [] = []
ffmap f (x:xs) = (f x):(ffmap f xs)
class (Ff f) => Sz f where
fsz :: (a -> b -> c) -> f a -> f b -> f c
fszu :: a -> f a
instance Sz [] where
fsz f [] _ = []
fsz f _ [] = []
fsz f (x:xs) [y] = (f x y):(map (\x -> f x y) xs)
fsz f [x] (y:ys) = (f x y):(map (f x) ys)
fsz f (x:xs) (y:ys) = (f x y):(fsz f xs ys)
fszu x = [x]
instance (Sz f, Num a, Show (f a), Eq (f a)) => Num (f a) where
xs + ys = fsz (+) xs ys
xs - ys = fsz (-) xs ys
xs * ys = fsz (*) xs ys
abs xs = ffmap abs xs
signum xs = ffmap signum xs
fromInteger i = fszu (fromInteger i)
r = 1+[4,5,6]
r2 = [1,2,3]+[4,5,6]
main = putStrLn $ show $ r++r2
updated: результат:
$ runhaskell.exe -XFlexibleInstances -XUndecidableInstances apl.hs
[5,6,7,5,7,9]
Подскажите, plz, кто шарит, я пока через типы классов не пробрался, а это просто скопипастил из интернета.
Tags: haskell
|