Flatmappable
Chainable
AndThenable
Computation builder
( I'll come back to this one )
( You can often apply them to many different instances )
Int -> Int(+3)add :: Int -> Int -> Int
add x y = x + yadd :: Int -> Int -> Int
add = (\x y -> x + y)add :: Int -> (Int -> Int)
add x = (\y -> x + y)three = 1 + 2three = (+) 2 1add1 = (+) 2Missing a parameter?
show :: Int -> Stringlength :: String -> IntdigitCount :: Int -> IntdigitCount :: Int -> Int
digitCount value = length (show value)digitCount :: Int -> Int
digitCount value = length . show valuedigitCount :: Int -> Int
digitCount = length . show (.) :: (b -> c) -> (a -> b) -> a -> cdata Suit = Club | Diamond | Spades | Diamonddata Rank = Two
| Three
| Four
| Five
| Six
| Seven
| Eight
| Nine
| Ten
| Jack
| Queen
| King
| Acedata Card = Card Suit Ranktype Deck = [Card]parseInt :: String -> IntparseInt :: String -> Maybe Intdata Status = Verified | Unverifieddata ShoppingCart = Empty | Active [Item] | Paid [Item]Beautiful clean
internal model
Dirty unclean outside world
The Great Gate
(+1) :: Int -> Intshow :: Int -> String( Increments a number by 1 )
( Returns the string representation of a number )
data Maybe a = Nothing | Just a2 -- a value
Just 2 -- a value with context.
fmap (+3) (Just 2)
Just 5class Functor f where
fmap :: (a -> b) -> f a -> f bTo make data type f a functor
You'll need to implement this function for your data type
map :: (a -> b) -> [a] -> [b]map :: (Int -> String) -> [Int] -> [String]map show [1, 2, 3, 4] ["1", "2", "3", "4"]map (+1) [1, 2, 3, 4][2, 3, 4, 5](a -> b) -> ([a] -> [b])(a -> b) -> (Maybe a -> Maybe b)data Maybe a = Nothing | Just a