답변
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으로 볼 수 있습니다.
하나 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
@ user2340939 아니요 - a -> b -> c는'a -> (b -> c)'와 동등하기 때문에'(a -> b) -> c'와 비슷한 방식으로 동작합니다. 그것을 대괄호로 확장하는 것을 고려하십시오. – AJFarmar
이것은 동의어 (또는 유형 별칭)입니다. 그것은 단순히 어디에서나'Move X'를 볼 수 있다는 것을 의미합니다. 정신적으로 그것을'Zipper X -> Maybe (Zipper X)'로 대체 할 수 있습니다. – Rufflewind
나는 그것이 서명을위한 유형 별명으로 사용될 수 있다는 것을 알지 못했다. 고마워! – user2340939
@ user2340939 정말 사용할 수있는 유일한 방법입니다. 서명은 하나의 유형일뿐입니다. –