$ ghci GHCi, version 8.8.4: https://www.haskell.org/ghc/ :? for help Prelude> :q Leaving GHCi. $ ghci GHCi, version 8.8.4: https://www.haskell.org/ghc/ :? for help Prelude> :l lec1.hs [1 of 1] Compiling Main ( lec1.hs, interpreted ) Ok, one module loaded. *Main> :r [1 of 1] Compiling Main ( lec1.hs, interpreted ) Ok, one module loaded. *Main> main "hello world!" *Main> :q Leaving GHCi. frankfu:~/teaching/544/spring-2026/lectures/lecture1$ ghc lec1.hs [1 of 1] Compiling Main ( lec1.hs, lec1.o ) Linking lec1 ... frankfu:~/teaching/544/spring-2026/lectures/lecture1$ ls lec1 lec1.hi lec1.hs lec1.hs~ lec1.o lec1Prep.hs lec1Prep.hs~ frankfu:~/teaching/544/spring-2026/lectures/lecture1$ ./lec1 "hello world!" frankfu:~/teaching/544/spring-2026/lectures/lecture1$ ghci GHCi, version 8.8.4: https://www.haskell.org/ghc/ :? for help Prelude> :l lec1.hs [1 of 1] Compiling Main ( lec1.hs, interpreted ) Ok, one module loaded. *Main> b True *Main> :t b b :: Bool *Main> True && False False *Main> True || False True *Main> 1 + 2 + (3 * 4) 15 *Main> :t 1 1 :: Num p => p *Main> :t fst fst :: (a, b) -> a *Main> :t snd snd :: (a, b) -> b *Main> :r [1 of 1] Compiling Main ( lec1.hs, interpreted ) Ok, one module loaded. *Main> fst p1 2 *Main> snd p2 'a' *Main> :t fst p1 fst p1 :: Int *Main> :t fst p2 fst p2 :: Int *Main> :t snd p2 snd p2 :: Char *Main> :t snd p1 snd p1 :: Bool *Main> :t (7, 'b') (7, 'b') :: Num a => (a, Char) *Main> :t (7, True, 'b') (7, True, 'b') :: Num a => (a, Bool, Char) *Main> :t (True, 'b', 7) (True, 'b', 7) :: Num c => (Bool, Char, c) *Main> :t () () :: () *Main> :t (True) (True) :: Bool *Main> :t [1,2,3] [1,2,3] :: Num a => [a] *Main> :t [True, False, True] [True, False, True] :: [Bool] *Main> :t ['a', True] :1:7: error: • Couldn't match expected type ‘Char’ with actual type ‘Bool’ • In the expression: True In the expression: ['a', True] *Main> :t [] [] :: [a] *Main> :t (:) (:) :: a -> [a] -> [a] *Main> *Main> *Main> 1:[] [1] *Main> *Main> *Main> *Main> *Main> 1:(2:(3:[])) [1,2,3] *Main> 'b' :('c':[]) "bc" --- ['b', 'c'] *Main> :t "bc" "bc" :: [Char] *Main> :r [1 of 1] Compiling Main ( lec1.hs, interpreted ) Ok, one module loaded. *Main> :r [1 of 1] Compiling Main ( lec1.hs, interpreted ) Ok, one module loaded. *Main> :t l2 l2 :: ([Int], String) *Main> l2 ([1,2,3],"hello") *Main> :r [1 of 1] Compiling Main ( lec1.hs, interpreted ) Ok, one module loaded. *Main> :t l2 l2 :: ([Int], [Char])