2013-06-11 5 views
5

나는 컴파일 된 heist 개념을 파악할 수없는 것 같습니다. 그물에 대한 예는 전혀 없습니다. 간단한 코드 스 니펫을 해석에서 컴파일로 변경하는 방법은 무엇입니까? 예를 들어해석에서 컴파일 된 heist

:

나는 "runChildren", "mapSplices"의 간단한 조합을 할 것입니다 방법
listUsersH :: AppHandler() 
listUsersH = do 
    users <- liftIO $ getColList "users" 
    let userListS = mapSplices userLinkS users 
    heistLocal (bindSplice "users" userListS) $ render "list-users" 
    where 
    userLinkS d = runChildrenWithText [("user",T.pack $ at "uname" d)] 

, "bindSplice"컴파일 항공사 강도 사건으로 "렌더링"?

개념이 다르며 "heistLocal"이 없다는 것을 이해합니다.하지만 지금은 돌아가서 "for each"루프에 여러 레코드를 표시하는 것과 같은 기본 작업을 수행하는 방법을 다시 배워야합니다. 방법. 누군가가 이것을 분명히하고 위와 같은 간단한 예를 보여줄 수 있습니까?

현재 컴파일 된 강도로 간단한 변수 대체 방법을 알고 있습니다. 예를 들어 이 :

simpleString = "Insert me..." 
insertString = heistLocal (bindSplices spl) $ render "tst" 
where 
    spl = [("var", textSplice simpleString)] 

, 사람이 기초를 도와 또는 최소한의 예제와 함께 위치에 날 지점하시기 바랍니다. 나는 스냅 웹 사이트 워드 프로세서를 읽었습니다.

답변

1

컴파일 된 스플 라이스는 확실히 작업하기가 어렵습니다. 하나의 경우 모든 스플 라이스가 정적으로 앞쪽으로 묶여 있어야합니다. 이것은 사고 방식에 상당한 변화가 필요합니다. 전에는 heistLocal을 사용하여 필요할 때마다 바인딩 할 수있는 제한된 범위의 항목으로 스플 라이스를 볼 수있었습니다. 요청의 정보를 사용하여 핸들러에서 결정을 내린 다음 그에 따라 스플 라이스를 바인드 할 수 있습니다. 컴파일 된 스플 라이스로는 여전히 비슷한 일을 할 수 있지만 컨트롤을 반전해야합니다. 이제는 스플 라이스 (핸들러 모나드 주변의 모나드 변환기이므로 핸들러 함수에 대한 액세스 권한이 여전히 있음) 내부에서 이러한 종류의 동적 요청 기반 의사 결정을 수행해야합니다.

컴파일 된 스플 라이스를 웹 디자이너가 사용할 수 있도록 글로벌 리소스로 생각하는 것이 좋습니다.하지만 웹 디자이너는 모든 페이지에서 사용할 수 있지만 적합하다고 생각합니다. 이 방법으로 스플 라이스를 보는 데에는 몇 가지 장점이 있습니다. 첫째, heistLocal에 바인딩 된 특수 스플 라이스를 사용하는 경우보다 직각 및 조합이 가능합니다. 둘째, 스플 라이스가 바인딩되었는지 여부에 대해 걱정할 필요가 없으므로 디버깅이 더 쉬워집니다.

그러나 컴파일 된 스플 라이스의 가장 큰 어려움은로드 시간과 런타임 간의 분리와 스플 라이스 기능에 대한 의미 때문입니다. 위키 페이지의 마지막 섹션 인 migrating to Heist 0.10에 대해 조금 이야기합니다. 이 뒤에 a longer discussion of the "why"도 있습니다.

Google은 여전히 ​​컴파일 된 Heist 용 API를 개선하기 위해 노력하고 있습니다. 우리는 Heist 0.13을 마무리하는 데 거의 가깝습니다. 이는 API를 상당히 단순화하고 더 쉽게 이해할 수 있도록 도와줍니다. 현재 github의 new-api 브랜치에있는 코드는 출시 준비가 거의 끝나 있습니다.

+0

확인. 이제 인터프리터 변형을 계속 사용 하시겠습니까? 글쎄, 적어도 API를 정렬하고 안정화시킬 때까지. 솔직히 말하면 아직 개념을 고수 할 수는 없습니다 ... 아직 클릭하지 않았습니다. 그래서 저는 처음부터 makeSnaplet 함수에서 모든 스플 라이스를 바인딩하고 처리 할 것입니다, 그렇죠? –

+0

한 번에 모두 수행 할 필요는 없지만 addConfig 함수를 사용하여 컴파일 된 모든 스플 라이스를 추가해야합니다. 전환 여부는 출혈이 원하는 방식에 따라 다릅니다. 나는 훨씬 더 많이 변하는 새로운 api 브랜치를 예견하지 않는다. 할 일 목록에 남아있는 유일한 것은 하나 또는 두 개의 기능을 추가하는 것입니다. 거기에있는 모든 것은 꽤 안정되어야합니다. 0.13을 공개 할 때까지이 질문에 대한 구체적인 코드 응답을 제공하지는 않겠지 만, IRC에서 나를 공격하면 올바른 방향으로 안내 할 수 있습니다. – mightybyte

+0

감사합니다, mightybyte, 0.13 릴리스 이후에 몇 가지 예를 기다리게하겠습니다. 적어도 가장 일반적인 패턴. 그물에 아무것도 없기 때문에 그것은 유용한 sooooo 일 것입니다. 그때까지 해석 된 변형을 고수 할 것입니다. –