問題空間で検索を実行したい場合、ノードが既に訪れたさまざまな状態を追跡したい場合、I several options to do it depending on the constraints of those states。しかしながら;ユーザーが入力として使用している状態の制約に応じて関数やその他をディスパッチする方法はありますか?例えば、私が持っていた場合:関数内のHaskell型式メーターのチェック
data Node a = Node { state :: a, cost :: Double }
そして、私はProblem a
上で検索を実行したい、a
はEq
、Ord
またはHashable
あり、その後、検索の異なる種類を呼び出す場合、私がチェックできる方法はありますか?擬似コードでは、何かのように:
search :: Eq a => Problem a -> Node a
search [email protected](... initial ...) -- Where initial is a State of type a
| (Hashable initial) = searchHash problem
| (Ord initial) = searchOrd problem
| otherwise = searchEq problem
私はちょうど、ユーザーが自分の用途に応じて1 search
または別を選択してみましょう可能性が承知しています。そのようなことをすることができるのは、検索が実際にはユーザーエンドポイントの1つではないためです(1つの例は、bfs
であり、search
をコールして、それがBreadth-Firstサーチ)。
コンパイル時に、すべてのタイプ情報が消去されます。実行時に、値はタイプでメモリにタグ付けされず、すべてのタイプクラスインスタンスの表現もありません。これはそのようなチェックを不可能にする。この情報が必要な場合、プログラマは明示的にそれを保持するように要求しなければならない。 Daniel Wagnerのようにカスタムクラスで以下のようにします。 – chi