가능한 중복은 :에
fmap
을 적용하여 왜 (a, a)가 펑터가 아닌가?가 그럼 난import Data.List (partition) quicksort [] = [] quicksort (x:xs) = let (smaller, notSmaller) = partition (< x) xs in quicksort smaller ++ x : quicksort notSmaller
quicksort
에 두 개의 재귀 호출을 생략하고 싶었 :
Making (a, a) a Functor
나는 퀵 다음과 같은 구현을 썼다 목록 쌍 :
quicksort (x:xs) =
let (smaller, notSmaller) = fmap quicksort $ partition (< x) xs
in smaller ++ x : notSmaller
분명히 (a, a)
은 기능이 없습니다. 왜 그런가요? 나는 하나 제공하기 위해 노력 :
instance Functor (a, a) where
fmap f (x, y) = (f x, f y)
을하지만 ghci 내 시도 좋아하지 않았다
이Kind mis-match
The first argument of `Functor' should have kind `* -> *',
but `(a, a)' has kind `*'
In the instance declaration for `Functor (a, a)'
누군가가 나에게 그 오류를 설명 할 수 있습니까? 나는 다양한 "수정"을 시도했지만 그들 중 누구도 일하지 않았습니다.
는 (a, a)
Functor
의 인스턴스를 만들 수 있습니까? 아니면 형식 시스템이 표현력이 부족한 것입니까?
아하, 나는 타입 페어 a = (a, a)'를 시도했는데 작동하지 않았다. C++에서 typedef''단지와 유사하다 type' – fredoverflow
@FredOverflow'; 그것은 새로운 타입을 만들지 않고 별칭을 만들지 않습니다. – qox