이 글은 책 The Dao of Functional Programming의 1장 2절 Yin and Yang을 정리한 것이다.
오브젝트(object)는 연결로 정의된다. 애로우(arrow)는 두 오브젝트가 서로 연결되어 있다는 증거이다. 증거가 없다는 것은 두 오브젝트가 연결되어 있지 않다는 것을 의미한다. 두 오브젝트 사이에 증거는 여러개 있을 수도 있고 하나만 있을 수도 있다.
하나만 있는 것을 유일한(unique) 애로우라고 한다. 유일하다는 것은 무엇을 의미할까? 두 오브젝트 사이에 연결이 유일할 때 만약 애로우가 두 개 있다면 그 두 애로우는 서로 같음을 의미한다.
밖의 모든 오브젝트로 나가는 유일한 애로우를 가진 오브젝트를 시작(initial) 오브젝트라고 한다.
시작 오브젝트의 쌍대(dual)는 모든 객체로부터, 들어오는 애로우가 유일한 오브젝트이며 종료(terminal) 오브젝트라고 한다.
쌍대는 명제에서 아래 화살표 왼쪽에 적은 각 기호를 오른쪽에 적은 기호로 바꾼 것이다.
수학에서 시작 오브젝트는 으로 표기하고 종료 오브젝트는 로 표기한다.
시작 오브젝트는 모든 것의 출발점이다.
하스켈에서 시작 오브젝트와 같은 것은 타입 Void이다. Void에서 출발해서 모든 것으로 가는 애로우가 있으므로 Void에서 출발해서 Void로 도착하는 것도 있다.
하스켈에서 종료 오브젝트에 해당하는 것은 Unit이다.
논리학에서 종료 오브젝트는 True를 의미하고 으로 적는다. 반대로 시작 오브젝트는 False를 의미하고 로 적는다.
하스켈 Void에서 모든 오브젝트로 가는 유일한 함수의 이름과 타입은 다음과 같다.
absurd :: Void -> a