갈루아의 반서재

Key points:

• Integer -> Char -> Char 와 같은 타입을 가진 함수의 경우, Integer 과 Char 라는 2개의 인수를 갖고, Char 를 결과로 반환한다.

• f x y z 와 같은 함수 콜이 의미하는 것은 ((f x) y) z 이고 개념적으로는 2개의 이름없는 임시함수가 생성된다.

• 요구되는 것보다 적은 인수로 함수를 호출하면 partial application 이 생성된다.



Specifying a function's type

함수의 정의와 함께 함수의 타입을 특정하는 것이 일반적이다. 


Continuation with indentation

하스켈 소스 파일은 연속되는 선언의 모음이나 마찬가지다. 아래 2개의 선언을 포함한 파일을 살펴보자. 

1
2
3
4
5
 
(blackbriar) root@gcloudx:~/blackbriar# cat indent1.hs
add::Integer -> Integer -> Integer
add x y = x + y(blackbriar)
 
cs


선언은 최초 선언한 라인보다 들어쓰기를 함으로써 여러 줄에 걸쳐서 할 수 있다. 이러한 엮인 선언 방식은 보기는 별로일지 모르나 유효한 방식이기는 하다. 

1
2
3
4
5
6
7
add
::
Integer-> Integer-> Integer
add x y
=
x
+ y 
cs


이전 선언과 같은 컬럼에서 다시 그 라인이 시작되면 해당 선언은 끝이 나고, 새로운 선언이 시작되는 셈이다.

1
2
3
4
(blackbriar) root@gcloudx:~/blackbriar# cat indent2.hs
add::Integer -> Integer -> Integer
add x y =
x + y
cs

실행하면 다음과 같은 파싱 에러가 뜬다.

1
2
3
4
5
6
7
8
9
10
 
(blackbriar) root@gcloudx:~/blackbriar# ghci indent2
GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
[1 of 1] Compiling Main             ( indent2.hs, interpreted )
 
indent2.hs:3:1:
    parse error (possibly incorrect indentation or mismatched brackets)
Failed, modules loaded: none.
Prelude>
 
cs