저는 하스켈 모나드를 가지고 놀고 있습니다. 나는 수정할 수없는 오류가 계속 발생합니다. 내 코드 세그먼트는 상태 Monad를 사용하여 문자열의 처음 두 문자를 함께 추가하고이를 상태의 일부로 반환합니다. 내 "풋"라인은 계속 오류를 표시합니다.계속하시오 (FlexibleContexts를 사용하여 이것을 허용하십시오) 간단한 Haskell 함수에서 에러가 발생했습니다.
* Non type-variable argument in the constraint: MonadState [a] m
(Use FlexibleContexts to permit this)
* When checking the inferred type
testH :: forall (m :: * -> *) a. MonadState [a] m => [a] -> m [a]
어떻게 해결할 수 있습니까? 언어를 확장하는 것은 난 그냥 알 수 있듯이 당신은 하나가 FlexibleContexts
을 가능하게함으로써이 문제를 해결 할 수는
test xs =
runState (testH (tail xs)) ((head xs):[])
testH xs =
do
a <- get
put ((head xs):a)
b <- get
return b
'Control.Monad.State'을 (를) 가져 오는 중입니까? 그렇다면 대신'Control.Monad.Trans.State'를 가져와보십시오. – Alec
"언어 확장은 선택 사항이 아닙니다."라는 것이 무엇인지 알 수 있을지 잘 모르겠습니다. 모나드로 그냥 놀고 있다면'{- # LANGUAGE FlexibleContexts # -}'를 코드 상단에 추가하면 어떨까요? – Lazersmoke
"언어 확장은 옵션이 아닙니다."단, 범위에'MonadState'가있는 것만으로'MultiParamTypeClasses'를 사용하고 있기 때문에 이미 언어를 확장했습니다. –