2013-08-19 6 views
4

함수 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 
+6

확인 http://www.haskell.org/haskellwiki/Scoped_type_variables – dg123

+0

감사를 참조하십시오,이 그것을 해결합니다. 이것을 당신이 대답으로 바꾸면 나는 그것을 올바른 것으로 표시 할 것입니다. – tohava

+0

이 특정 예제의 경우 내부 형식 서명에'(Monad m)'제약 조건을 추가하여 컴파일 할 수도 있습니다. –

답변