2017-04-24 8 views
1

을 위해 통역을 정의,이 통역을 정의하는 코드 예제가있다 :<code>purescript-free</code> 패키지에서 무료 모나드

teletypeN :: forall eff. NaturalTransformation TeletypeF (Eff (console :: CONSOLE | eff)) 
teletypeN (PutStrLn s a) = const a <$> log s 
teletypeN (GetLine k) = pure (k "fake input") 

어떻게 정의하고 반환 형식이 Array Int 또는 State String Int 또 다른 인터프리터를 실행할 수 있습니까?

답변

3

해석기가 자연 변환 (예 : forall a. f a -> g a)으로 제공되므로 특정 값으로 해석 할 수 없습니다. 여기서 a은 해석을 수행하는 함수에 의해 "변경"될 수 없습니다.

Array 또는 State String으로 해석 할 수 있지만 a은 해석중인 구조에 따라 항상 결정됩니다. 만약 당신이 단지 Free MyAlgebra Int -> Array Int을 해석하기를 원한다면, 이것은 어쨌든 다 잘될 것입니다.

+0

어떻게 요소 수를 계산하는 인터프리터를 작성 하시겠습니까? '순수 0 '은 어떤'a '에 대해서도 표현 될 수 없습니다. – z1naOK9nu8iY5A

+2

'Writer (Sum Int)'를 사용하여 해석하십시오. –

+1

감사합니다. 나는 당신이 Writer (Additive Int)를 의미한다고 생각합니다. – z1naOK9nu8iY5A