私はコードを使用するときや、typeclassを使わないときには理解するのが難しいです。私は自分自身を作成を意味し、は既に定義されていません使用もちろん、タイプメガネ。例(非常に愚かな例)で、私は実行する必要があります。私はtypeclassesを使うべきかどうか?
data Cars = Brakes | Wheels | Engine
data Computers = Processor | RAM | HardDrive
class Repairable a where
is_reparaible :: a -> Bool
instance Repairable Cars where
is_repairable (Brakes) = True
is_repairable (Wheels) = False
is_repairable (Engine) = False
instance Repairable Computers where
is_repairable (Processor) = False
is_repairable (RAM) = False
is_repairable (HardDrive) = True
checkState :: (Reparaible a) => a -> ...
checkState a = ...
(もちろん、これは愚かな、不完全な例です)。
しかし、これはちょっとした用途のためにたくさんあります。なぜ私は新しいデータ型と型式(インスタンスを持つ)を定義しなくても、何か単純で機能を定義するだけではいけません。
この例題はあまりにも単純ですが、関数を定義するだけではなくgithubでHaskellコードを参照すると、実際には(新しいデータ型+型式+インスタンス)のような事がよくあります。
私は新しいデータ型、型式などを作成する必要がありますが、いつ関数を使うべきですか?
ありがとうございました。
うん!これは非常に完全な答えです、ありがとうございます!あなたの "タイプクラスを使用しない場合は..."は、何かを行う良い方法を選択するのに特に役立ちます。 – vildric
これは絶対に厳密な規則ではありませんが、一般的なヒントのように、「1つのメソッドのためだけに型抜きを使用しないでください」という追加になります。 – MathematicalOrchid
@MathematicalOrchidこれは「ニーズの法則」ルールの一部です。これは、1つのメソッドしか持たない型クラスの法則を持つことはめったにありません(連想法を持つ 'SemiGroup'のようなものを除いて) –