2017-03-31 4 views
2

느릅 나무의 타입 시그니처를 이해하려고합니다. 이 함수는 정확히 무엇을 반환합니까? 그것은 아무 인자도받지 않고 반환하는 함수 인 것처럼 보입니다 ...느릅 나무의 타입 시그니처 이해하기 리턴 타입

route : Parser (Page -> a) a 
+0

어디서 왔는지에 대한 참조를 추가 할 수 있습니까? – robertjlooby

+0

[이 예제 앱]의 22 번째 줄 (https://github.com/AdrianRibao/elm-spa-example/blob/master/main.elm). 감사합니다 – Matt

답변

2

저는 스스로 학습을위한 연습으로 이것을 대답하려고합니다. 다른 것들이 내가 잘못하면칩니다.

난 당신이

type Person = Adult String | Child String Age 

아이 같은 것을하는 데 사용됩니다 확신하는 것은 두 개의 매개 변수를 유형입니다. 구문 분석기는 같습니다. 그러나 definition 꽤 무서운가요 당신이 파서는 궁극적으로 미국의 목록에 국가에서 함수의 래퍼 인 방법을 참조했다

type Parser a b = 
    Parser (State a -> List (State b)) 


type alias State value = 
    { visited : List String 
    , unvisited : List String 
    , params : Dict String String 
    , value : value 
    } 

. 궁극적으로 그것은 'unvisited'문자열이나 params의 목록을 통과하게 될 것입니다. 점진적으로 각각을 방문하고 그 결과가 최종 '가치'로 결합 될 것입니다. a, b - -

다음으로, 파서는 두 가지 유형의 매개 변수를 사용하는 동안주의 parseHash이 당신의 원래

route : Parser (Page -> a) a 

이 있어야 할 것입니다,
parseHash : Parser (a -> a) a -> Location -> Maybe a 

그래서 정의

route : Parser (Page -> Page) Page 

을 입력하여 확인하십시오.

따라서 원래 질문으로 돌아가려면 route은 하나의 Page에서 다른 것으로 이동하는 방법에 대한 지침을 캡슐화하는 파서 (매우 일반적인 개체)이며 parseHash를 통해 사용할 수 있습니다. Page 다음으로 가야합니다. 물론 라우터에서 기대할 수있는 것입니다.

희망이있어서 시작하겠습니다.

+1

감사. 이것은 올바른 방향으로 나를 가리켰다. – Matt

관련 문제