2014-04-20 4 views
4

통합 유형에 대해 ghci를 쿼리 할 수 ​​있습니까?통합 유형을 ghci에 쿼리하는 방법은 무엇입니까?

예를 들어 (Int -> Bool)(a -> Bool) 사이의 통합 유형을 알고 싶다면 어떻게 이것을 ghci에 쿼리 할 수 ​​있습니까?

내가 해결하려고하는 것은 Haskell: The Craft of Functional Programming의 제 3 판에있는 운동 13.23입니다.

두 형식 표현 이 통합 가능한지 여부를 확인하기 위해 하스켈 시스템을 어떻게 사용할 수 있습니까? 그렇다면 통합은 무엇입니까? 힌트 : 다음과 같이 정의

zircon = zircon 

값은 당신이 원하는 모든 유형을 선언 할 수 있습니다 : 당신이 정의 된 값이, 지르콘 말, 자체와 동일시되는 하스켈 더미 정의를 만들 수 있습니다.

감사합니다.
Sebastian.

답변

5

편도는 asTypeOf:: a -> a -> a입니다. 함수로, asTypeOf은별로 흥미롭지는 않지만 형식이 좋다 : 두 개의 인수와 반환 형식을 통합해야한다. 따라서 :

> :t asTypeOf (undefined :: Int -> Bool) (undefined :: a -> Bool) 
asTypeOf (undefined :: Int -> Bool) (undefined :: a -> Bool) 
    :: Int -> Bool 

따라서 두 유형이 Int -> Bool으로 통일됨을 알 수 있습니다. 조금 더 재미있는 예를 들어, Maybe af (Bool, c)을 통일하자 한편

> :t asTypeOf (undefined :: Maybe a) (undefined :: f (Bool, c)) 
asTypeOf (undefined :: Maybe a) (undefined :: f (Bool, c)) 
    :: Maybe (Bool, c) 

을, 운동의 목적을 위해, 내가 손으로 통일을 시도하는 것이 좋습니다. 일단 힘을 얻으면 어렵지 않습니다. 그리고 계속해서 사용할 기술입니다.

+1

목록 생성자't : undefined :: 어쩌면 a, undefined :: f (Bool, c)]'를 사용할 수도 있습니다. –

관련 문제