갈루아의 반서재

그럼 간단한 함수를 작성해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Prelude> let double x = x * 2
double :: Num a => a -> a
 
Prelude> :t double
double :: Num a => a -> a
 
Prelude>
Prelude> double 5
10
it :: Num a => a
 
Prelude> double 2.7
5.4
it :: Fractional a => a
 
Prelude> double (double (double 111111111))
888888888
it :: Num a => a
Prelude>
 
cs

좀 더 예를 살펴보자.

1
2
3
4
5
6
7
8
Prelude> let neg x = -x
neg :: Num a => a -> a
 
Prelude> let isPositive x = x > 0
isPositive :: (Num a, Ord a) => a -> Bool
 
Prelude> let toCelsius temp = (temp - 32) * 5/9
toCelsius :: Fractional a => a -> a
cs

수행에 기반하여 타입을 결정하는 것을 type inferencing 라고 한다. 주의해야할 것은, 함수와 파라메터의 이름은 소문자 또는 _ 로 시작해야한다. 만약 대문자로 시작하면 data constructors 로 간주하게 된다.

함수로부터 추론되는 타입을 제한하기 위해서 :: 을 사용할 수 있다. 아래의 예를 보자. 

1
2
3
4
5
6
7
8
Prelude> let neg x = -x ::Integer
neg :: Integer -> Integer
 
Prelude> let isPositive x = x > (0::Integer)
isPositive :: Integer -> Bool
 
Prelude> let toCelsius temp = (temp - 32) * 5/(9::Double)
toCelsius :: Double -> Double
cs