私はクイックソートの次の実装を書いた:
import Data.List (partition)
quicksort [] = []
quicksort (x:xs) =
let (smaller, notSmaller) = partition (< x) xs
in quicksort smaller ++ x : quicksort notSmaller
その後、私はfmap
にを適用することにより、quicksort
には、2つの再帰呼び出しを省略したいですリストのペア:
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のは、私の試みを好きではなかった:私は1つを提供しようとした
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
のインスタンスにすることはできますか?あるいは、表現力が十分でないタイプのシステムですか?
Aha、私は 'ペアa =(a、a)'を試しましたが、うまくいかなかった。 – fredoverflow
@FredOverflow 'type'はC++の' typedef'に似ています。それは新しいタイプ、ちょうどエイリアスを作成しません(それで何の違いもありません)。 – qox