そのため、代数型と型クラスをよく理解していますが、そのソフトウェア エンジニアリング/ベスト プラクティスの側面に興味があります。
型クラスに関する現代のコンセンサスがあるとすれば、それは何ですか? 彼らは悪ですか?彼らは便利ですか?それらはいつ使用されるべきですか?
これが私のケーススタディです。私はRTSスタイルのゲームを書いていて、さまざまな種類の「ユニット」(タンク、スカウトなど)を持っています。各ユニットの最大ヘルスを取得したいとします。それらのタイプを定義する方法に関する私の2つの考えは次のとおりです。
ADT のさまざまなコンストラクター:
data Unit = Scout ... | Tank ...
maxHealth :: Unit -> Int
maxHealth Scout = 10
maxHealth Tank = 20
Unit の型クラス、各種類はインスタンス
class Unit a where
maxHealth :: a -> Int
instance Unit Scout where
maxHealth scout = 10
instance Unit Tank where
maxHealth tank = 20
明らかに、最終製品にはさらに多くのフィールドと機能が含まれます。(たとえば、各ユニットの位置などは異なるため、すべての機能が一定であるとは限りません)。
秘訣は、一部のユニットには意味のある関数があり、他のユニットには意味がないということです。たとえば、すべてのユニットには getPosition 関数がありますが、戦車には getArmour 関数がある可能性があります。これは、装甲のないスカウトには意味がありません。
他の Haskeller が私のコードを理解して従うことができるようにしたい場合、これを書く「一般的に受け入れられている」方法はどれですか?