ghci>:t 'a'
'a' :: Char
ghci>:t True
True :: Bool
ghci>:t "Hello"
"Hello" :: [Char]
ghci>:t (True, 'a')
(True, 'a') :: (Bool, Char)
ghci>:t 4 == 5
4 == 5 :: Bool
a
는 Char 타입을 갖는다# removeNonUppercase.hs
removeNonUppercase :: [Char] -> [Char]
removeNonUppercase st = [c | c <- st, c `elem` ['A'..'Z']]
ghci>removeNonUppercase "HelloWorld"
"HW"
# addThree.hs
addThree :: Int -> Int -> Int -> Int
addThree x y z = x + y + z
ghci>addThree 1 2 3
6
Int
는 정수(integer)의 약자다
Integer
는 정수를 저장하는데 사용되지만 한계 값이 없다
Float
은 부동소수점을 갖는 타입이다Double
은 Float보다 정밀도가 2배 가량 높은 부동소수점이다
Bool
은 True, False 두 값만 가질 수 없다Char
은 유니코드 문자를 나타낸다ghci>:t head
head :: [a] -> a
리스트가 숫자나 문자 또는 리스트를 가지고 있든 상관없다
ghci>:t fst
fst :: (a, b) -> a
ghci>:t (==)
(==) :: Eq a => a -> a -> Bool
=>
는 class constraint라고 부른다ghci>:t (>)
(>) :: Ord a => a -> a -> Bool
ghci>:t compare
compare :: Ord a => a -> a -> Ordering
ghci>5 `compare` 3
GT
ghci>"Abcd" `compare` "Bcdef"
LT
compare
함수는 Ord인스턴스가 타입인 두 개의 값을 받아서 Ordering을 반환한다ghci>:t show
show :: Show a => a -> String
ghci>show 3
"3"
ghci>show True
"True"
ghci>:t read
read :: Read a => String -> a
ghci>read "8.2" + 3.8
12.0
ghci>read "5" - 2
3
ghci>read "[1,2,3,4]" ++ [3]
[1,2,3,4,3]
ghci>read "4"
*** Exception: Prelude.read: no parse
ghci>read "4" :: Int
4
read "4"
만 입력한 경우 GHCi는 어떤 타입을 반환 받고 싶어하는지 알지 못하여 오류가 발생한다ghci>:t minBound
minBound :: Bounded a => a
ghci>minBound :: Int
-9223372036854775808
ghci>maxBound :: Int
9223372036854775807
ghci>minBound :: Bool
False
ghci>maxBound :: Bool
True