type FracList = [Float] incList :: FracList -> FracList incList = map (+1) --sumIncList l = foldl (+) 0 (incList l) sumIncList = foldl (+) 0 . incList -- va rezulta sumIncList :: FracList -> Float data FuzzyBoolean = CertainTrue | CertainFalse | Uncertain toBool CertainTrue = True toBool CertainFalse = False toBool Uncertain = undefined data Natural = Zero | Succ { prev :: Natural } deriving (Show, Eq) unu = Succ Zero doi = Succ unu addNatural Zero n = n addNatural (Succ m) n = Succ $ addNatural m n -- \> addNatural unu doi infixl 6 +* --(+*) = addNatural Zero +* n = n (Succ m) +* n = Succ $ m +* n -- \> unu +* doi {- prev (Succ m) = m prev Zero = undefined -- alternativ, îl definesc pe prev odată cu tipul -} -- \> prev doi +* unu == doi data MultiTuplu a = Null | Single a | Pair a a | Triple a a a deriving Show prefix 0 l = Null prefix 1 l = Single (head l) prefix 2 l = Pair (head l) (l !! 1) prefix 3 l = Triple (head l) (l !! 1) (l !! 2) -- \> prefix 3 [1..10] data ValueOrBool a = IsBool {valB :: Bool} | IsValue {val :: a} deriving Show elemPlus e l = if elem e l then IsValue e else IsBool False -- \> val $ elemPlus 2 [1,2,3] -- \> valB $ elemPlus 4 [1,2,3]