728x90
그럼 간단한 함수를 작성해보자.
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 |
728x90
'프로그래밍 Programming' 카테고리의 다른 글
Functional Programming with Haskell - Functions with multiple arguments (0) | 2018.03.30 |
---|---|
Functional Programming with Haskell - Loading functions from a file (0) | 2018.03.30 |
Functional Programming with Haskell - Type classes (0) | 2018.03.30 |
하스켈 모듈 언로딩 How to go back to prelude> in ghci (0) | 2018.03.27 |
Functional Programming with Haskell - Function types (0) | 2018.03.24 |