私は最近少し遅れてhobby projectを開始しました。ここでは、トリックプレイのカードゲームSkat(3人のプレイヤー)を実装しようとしています。 ハスケル - 何度も同じ文脈を繰り返すのを避けるには?
class Monad m => Player p m | p -> m where
playerMessage :: Message answer -> p -> m (Either Error answer,p)
が、私はこれらの3人のプレーヤーをラップする
StateT
を使用します:
一緒に遊ん(AI、ネットワークおよびローカルのような)選手の異なる種類を持っていることを可能にするために、私は型クラス
Player
を使用して
interfaceをデザイン
type PST a b c m x = StateT (Players a b c) m x
しかし、今、私はそれぞれの型シグネチャにコンテキストの大きな山を記述する必要があります。
dealCards :: (Player a m, Player b m, Player c m, RandomGen g)
=> g -> PST a b c m (SomeOtherState,g)
がどのように回避することができますこの大きな文脈を何度も繰り返し書いていますか?
あなたのコードはどこにいらっしゃいますか?より多くの文脈でより有用な助言を得るかもしれません。ここのコードは、実際に必要なものよりも厳密に一般的なものが好きだと思っていますし、意味をなさないものに特化して簡略化することもできますが、大きな文脈がなければそのことを確信できません。 –
@camccann [GitHub](https://github.com/fuzxxl/Unter)に公開されています。 github上のコードは、現在私の人生をより楽にするために多くのリファクタリングを行っているため、少し異なります。 – fuz
@FUXxxl - ランダムなコメント - モジュールごとに拡張子を指定する必要があります – alternative