함수 f 내부에 정의 된 함수 f '를 입력하려고합니다. 그러면 두 유형의 스펙 모두 동일한 유형 변수를 참조합니다. 그러나이 작업을 수행하려고하면 컴파일러에서 컴파일 오류가 발생합니다.이 오류는 m
외부와 m
내부가 동일한 유형 변수가 아니라고 가정합니다. 이 문제를 해결하는 방법에 대한 모든 팁?haskell 유형 스펙에서 이미 존재하는 유형 변수를 참조하는 방법은 무엇입니까?
f :: (Monad m) => (String -> Int -> String -> m()) -> [String] -> m()
f _ (x:_) = f' Nothing x
where
f' :: (Maybe Int) -> String -> m() -- when I comment this line, the code compiles
f' _ _ = return()
main = undefined
확인 http://www.haskell.org/haskellwiki/Scoped_type_variables – dg123
감사를 참조하십시오,이 그것을 해결합니다. 이것을 당신이 대답으로 바꾸면 나는 그것을 올바른 것으로 표시 할 것입니다. – tohava
이 특정 예제의 경우 내부 형식 서명에'(Monad m)'제약 조건을 추가하여 컴파일 할 수도 있습니다. –