2015-01-08 7 views
1

는, 무엇을 다음 줄의 의미 서명을 사용했다. 어떻게 사용합니까?하스켈 타입 키워드는 <a href="https://michaeldadams.org/papers/scrap_your_zippers/ScrapYourZippers.hs" rel="nofollow">the code from <em>Scrap Your Zippers</em></a>에서

+5

이것은 동의어 (또는 유형 별칭)입니다. 그것은 단순히 어디에서나'Move X'를 볼 수 있다는 것을 의미합니다. 정신적으로 그것을'Zipper X -> Maybe (Zipper X)'로 대체 할 수 있습니다. – Rufflewind

+0

나는 그것이 서명을위한 유형 별명으로 사용될 수 있다는 것을 알지 못했다. 고마워! – user2340939

+0

@ user2340939 정말 사용할 수있는 유일한 방법입니다. 서명은 하나의 유형일뿐입니다. –

답변

2

type 우리는 동의어를 만들 수 있습니다. 이는 길고 복잡한 유형의 단축 버전을 만들 수 있음을 의미합니다. 다음은 String 기본 유형의 정의입니다. 예, 다음과 같이 정의됩니다.

type String = [Char] 

이렇게하면 형식을 쓸 때 더 쉽게 읽을 수 있습니다. 누구나 String ~ [Char]을 선호합니다.

data 키워드와 같은 형식 인수를 사용할 수도 있습니다. 다음은 몇 가지 예입니다.

type Predicate t = t -> Bool 
type Transform t = t -> t 
type RightFoldSignature a b = (a -> b -> b) -> b -> [a] -> b 
type TwoTuple a b = (a,b) 
type ThreeTuple a b c = (a,b,c) 

... 등등. 따라서 저자가 가지고있는 선언에 대해 특히 이상한 점은 없습니다. 작성자가 작성하고 싶은 함수의 유형에 사용되는 일을 더 쉽게 작성하고 명확하게 읽을 수 있도록 유형 동의어를 작성하고 있습니다.

하스켈이 이것에 대해 own little section을 가지고 있음을 알게되면 다른 선언 목록을 here, here으로 볼 수 있습니다.

+0

하나 more question : 함수 moveQ :: Move a -> b -> (Zipper a -> b) -> Zipper a -> b moveQ :: Zipper a -> 어쩌면 (Zipper a) -> b -> 지퍼 a -> b) -> 지퍼 a -> b 또는 moveQ :: (지퍼 a -> 어쩌면 (지퍼 a)) -> b -> (지퍼 a -> b) -> 지퍼 a -> b, , fonction 매개 변수입니까? – user2340939

+0

@ user2340939 아니요 - a -> b -> c는'a -> (b -> c)'와 동등하기 때문에'(a -> b) -> c'와 비슷한 방식으로 동작합니다. 그것을 대괄호로 확장하는 것을 고려하십시오. – AJFarmar