2013-09-30 3 views
1

함수 목록에서 순열 오류를 수정하는 방법은 무엇입니까?Haskell Data.List 순열 함수

> :m + Data.List 

> permutations [(+1),(-2),(*3)] 

No instance for (Num a0) arising from a use of `+' 
The type variable `a0' is ambiguous 
Possible fix: add a type signature that fixes these type variable(s) 
Note: there are several potential instances: 
    instance Num Double -- Defined in `GHC.Float' 
    instance Num Float -- Defined in `GHC.Float' 
    instance Integral a => Num (GHC.Real.Ratio a) 
    -- Defined in `GHC.Real' 
    ...plus three others 
In the expression: (+ 1) 
In the first argument of `permutations', namely 
    `[(+ 1), (- 2), (* 3)]' 
In the expression: permutations [(+ 1), (- 2), (* 3)] 
+1

'(-2)'*하지 * 섹션 것을 잊지 마십시오,하지만 동등한'해야' – Ingo

답변

3

하스켈에서 1의 유형은

1 :: Num a => a 

그래서 하스켈이 경우에 어떤 a을 선택하기로 결정 할 수있다. 당신은

perms :: Num a => [[a -> a]] 
perms = permutations [(+1),(subtract 2),(*3)] 
+3

유형 (2 무효)'에 간단한 형식의 서명으로이 문제를 해결할 수있는 민 A => [[a -> a]]'라고 생각합니다. '(-2)'가 숫자로 해석되는 문제도 있습니다. 대신'빼기 2 '를 사용하여이를 수정합니다. – jtobin

+0

@jtobin Thanks, ed – jozefg

+0

'a'의 유형을 결정할 필요가 없습니다. 실제로 유형 서명은 아무 것도 변경하지 않습니다. 문제는 간단히'(-2)'로, 다른 사람이 말한 것처럼'Num a => a '로 읽히고, 목록의 다른 요소는'Num a => a -> a'입니다. – user2407038