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/2019_20/FP_2019_20/sandbox/lectures/haskell/ λ> f (0, "abc", 1) "abc" λ> f (0, 3.5, 1) 3.5 λ> :t f f :: (Eq a1, Eq a2, Num a1, Num a2) => (a1, b, a2) -> b λ> f (1, 4, 1) *** Exception: /home/trifon/fmisync/Courses/2019_20/FP_2019_20/sandbox/lectures/haskell/Tuples.hs:3:1-15: Non-exhaustive patterns in function f λ> h 5 10 15 λ> (((10))) 10 λ> (1,2,3,4) (1,2,3,4) λ> [1]:[[]] [[1],[]] λ> "" "" λ> :t "" "" :: [Char] λ> :t [] [] :: [a] λ> 'a':"" "a" λ> 'a':[] "a" λ> length [1,2,3,4,5] 5 λ> null [1,2,3,4,5] False λ> tail [1,2,3,4,5] [2,3,4,5] λ> length [1,2,3,4,5] 5 λ> :t enumFromTo enumFromTo :: Enum a => a -> a -> [a] λ> :t enumFromTo enumFromTo :: (Ord a, Num a) => a -> a -> [a] λ> enumFromTo 1 10 [1,2,3,4,5,6,7,8,9,10] λ> enumFromThenTo 1 3 10 [1,3,5,7,9] λ> enumFromThenTo 1 3 10 [1,3,5,7,9] λ> enumFromTo 1 10 [1,2,3,4,5,6,7,8,9,10] λ> enumFromThenTo 1 3 10 [1,3,5,7,9] λ> sum [1..10] 55 λ> enumFromThenTo 1 10 3 [1] λ> [1, 10 .. 3] [1] λ> [1 .. -5] [] λ> [1,0 .. -5] [1,0,-1,-2,-3,-4,-5] λ> [1,0 .. 3] [] λ> [1..3] ++ [5..7] [1,2,3,5,6,7] λ> reverse [1..5] [5,4,3,2,1] λ> reverse [1..5] [5,4,3,2,1] λ> [1..10] !! 3 4 λ> [1..10] !! 12 *** Exception: /home/trifon/fmisync/Courses/2019_20/FP_2019_20/sandbox/lectures/haskell/Lists.hs:(53,1)-(54,25): Non-exhaustive patterns in function !! λ> [1..10] !! 12 *** Exception: Опит за извличане на елемент от празен списък CallStack (from HasCallStack): error, called at /home/trifon/fmisync/Courses/2019_20/FP_2019_20/sandbox/lectures/haskell/Lists.hs:53:14 in main:Lists λ> [1..10] !! (-3) *** Exception: Опит за извличане на елемент от празен списък CallStack (from HasCallStack): error, called at /home/trifon/fmisync/Courses/2019_20/FP_2019_20/sandbox/lectures/haskell/Lists.hs:53:14 in main:Lists λ> elem 3 [1..10] True λ> elem 13 [1..10] False λ> 3 `elem` [1..10] True λ> :t length length :: Num p => [a] -> p λ> :t Lists.length Lists.length :: Num p => [a] -> p λ> :t Lists.length Lists.length :: [a] -> Int λ> dropWhile odd [1,3,4,5,6] \[4,5,6] λ> any odd [1..10] True λ> any (<0) [1..10] False λ> zip [1..10] [2..10] [(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,8),(8,9),(9,10)] λ>