point-free 스타일의 개념을 이해하려고합니다. 함수를 만들어 uncurry
을 사용하여 두 개의 값을 추가하려고했습니다.하스켈에서 point-free 스타일의 카레 사용에 관한 선언 문제
add = (+) . uncurry
그 결과는 불평 :
No instance for (Num ((a0, b0) -> c0))
arising from a use of `+'
Possible fix:
add an instance declaration for (Num ((a0, b0) -> c0))
In the first argument of `(.)', namely `(+)'
In the expression: (+) . uncurry
In an equation for `add': add = (+) . uncurry
이 선언의 문제인가? 나는 add :: (Int, Int) -> Int
을 시도했지만 잘 작동하지 않습니다.
시도 입력 : 다음에
add
형 서명으로 제한t (+)'': t의 uncurry'' : t ((+). uncurry)'와': t (uncurry. (+))'를 사용한다. 그러면': t (uncurry +)'. – Mephy
답은 문제를 해결하기 위해해야 할 일을 알려주지 만,'(+)를 사용하는 이유에 대해 더 관심이 있습니다. 괴롭다. 'uncurry'가 한 쌍을 가져 와서 두 개의 값을 반환하고, 그 값을'(+)'로 전달 했습니까? –
if (+)를 함수로 간주하는 것을 혼란스럽게 생각합니다. 나는 그것이 uncurry에 대한 논쟁으로 전달되어야한다고 생각합니다. – Fizzzz