Hours of hacking await! If I break, you can: 1. Restart: M-x haskell-process-restart 2. Configure logging: C-h v haskell-process-log (useful for debugging) 3. General config: M-x customize-mode 4. Hide these tips: C-h v haskell-process-show-debug-tips Changed directory: /home/trifon/fmisync/Courses/2021_22/FP_2021_22/sandbox/lectures/haskell/ λ> :t 5 5 :: Num p => p λ> :t [] [] :: [a] λ> :t elem elem :: (Foldable t, Eq a) => a -> t a -> Bool λ> :t elem elem :: Eq a => a -> [a] -> Bool λ> :t show show :: Show a => a -> String λ> :t enumFromTo enumFromTo :: Enum a => a -> a -> [a] λ> :k Int Int :: * λ> :k Integer Integer :: * λ> :k [Int] [Int] :: * λ> :k (Int,Bool) (Int,Bool) :: * λ> :k Measurable Measurable :: * -> Constraint λ> :k Measurable Int Measurable Int :: Constraint λ> :k Measurable Bool Measurable Bool :: Constraint λ> larger 21439847328473248 74328327584758458458753 False λ> larger 21439847328473248 743283275847 True λ> larger 21439847328473248 0 True λ> empty 0 True λ> empty 4329874983274 False λ> :t (1, 2) (1, 2) :: (Num a, Num b) => (a, b) λ> :k (Int, Bool) (Int, Bool) :: * λ> :t (,) (,) :: a -> b -> (a, b) λ> :k (,) (,) :: * -> * -> * λ> (,) 1 2 == (1,2) True λ> :k (,) Int Bool (,) Int Bool :: * λ> :k (Int, Bool) (Int, Bool) :: * λ> larger (4432843, 3247327647) (824383274, 1221) True λ> larger [1,4543,454365,5,243,243,32] larger [1,4543,454365,5,243,243,32] :: (Measurable a, Num a) => [a] -> Bool λ> size [1,4543,454365,5,243,243,32] 20 λ> size ([1,4543,454365,5,243,243,32],(123123321321,[(1,2),(3,4)])) 36 λ> :k Int Int :: * λ> :k Measurable Measurable :: * -> Constraint λ> :t False False :: Bool λ> :k Bool Bool :: * λ> :t Mon Mon :: Weekday λ> :t Sun Sun :: Weekday λ> :k Weekday Weekday :: * λ> :t today today :: Weekday λ> today today :: Weekday λ> x 2 λ> x True λ> today сряда λ> Fri вече не знам λ> :k Player Player :: * λ> :t Player Player :: Name -> Score -> Player λ> getPlayer katniss "Katniss Everdeen" λ> katniss katniss :: Player λ> :t name name :: Player -> Name λ> :t score score :: Player -> Score λ> name katniss "Katniss Everdeen" λ> score katniss 45 λ> :k Shape Shape :: * λ> :t Circle Circle :: Double -> Shape λ> :t Rectangle Rectangle :: Double -> Double -> Shape λ> :t radius radius :: Shape -> Double λ> :t width width :: Shape -> Double λ> :t height height :: Shape -> Double λ> :t circle circle :: Shape λ> :t rectangle rectangle :: Shape λ> circle circle :: Shape λ> rectangle rectangle :: Shape λ> today Wed λ> today == Thu False λ> today < Sat True λ> ((read "Thu")::Weekday) > today True λ> (read "Thu") > today True λ> read "Thu" *** Exception: Prelude.read: no parse λ> (read "Thu")::Weekday Thu λ> katniss Player {name = "Katniss Everdeen", score = 45} λ> katniss == Player "Katniss Everdeen" 55 False λ> circle Circle {radius = 2.3} λ> circle < rectangle True λ> read "Circle 2.3" < Circle 4.5 *** Exception: Prelude.read: no parse λ> ((read "Circle 2.3")::Shape) < Circle 4.5 *** Exception: Prelude.read: no parse λ> read "Circle { radius = 2.3}" < Circle 4.5 True λ> :t Just 5 Just 5 :: Num a => Maybe a λ> :k Maybe Maybe :: * -> * λ> :t Nothing Nothing :: Maybe a λ> :t Just Just :: a -> Maybe a λ> :k Maybe Maybe :: * -> * λ> :k Maybe Int Maybe Int :: * λ> :k Maybe [Int] Maybe [Int] :: * λ> :k Maybe (Int,[Bool]) Maybe (Int,[Bool]) :: * λ> :k Maybe (Maybe Int) Maybe (Maybe Int) :: * λ> :t Just Nothing Just Nothing :: Maybe (Maybe a) λ> getAt 5 [1..10] Just 6 λ> getAt (-1) [1..10] Nothing λ> getAt 123321 [1..10] Nothing λ> λ> fromNat five 4 λ> fromNat five 5 λ> toNat (fromNat five) Succ (Succ (Succ (Succ (Succ Zero)))) λ> fromNat (toNat 5) 5 λ> toNat 100 Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ (Succ Zero))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) λ> six BitZero (BitOne One) λ> fromBin six 6 λ> fromBin $ succBin $ succBin $ six 8 λ> l Cons 1 (Cons 2 (Cons 3 Nil)) λ> fromList l [1,2,3] λ> listHead l 1 λ> listTail l Cons {listHead = 2, listTail = Cons {listHead = 3, listTail = Nil}} λ> listTail Nil *** Exception: No match in record selector listTail λ> listHead Nil *** Exception: No match in record selector listHead λ> fromList (l +++ l) [1,2,3,1,2,3] λ> t Node {root = 3, left = Node {root = 1, left = Empty, right = Empty}, right = Node {root = 5, left = Empty, right = Empty}} λ> depth t 2 λ> depth (leaf True) 1 λ> leaves leaves :: BinTree a -> [a] λ> leaves t [1,5] λ> mapBinTree (+1) t Node {root = 4, left = Node {root = 2, left = Empty, right = Empty}, right = Node {root = 6, left = Empty, right = Empty}}