如果我想在問題空間上執行搜索並且想跟蹤節點已經訪問過的不同狀態,我需要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
我知道我可以讓用戶選擇一個search
或其他根據自己的使用;但能夠做這樣的事情對我來說可能非常方便,因爲搜索並不是真正的用戶端點之一(例如,可能是一個函數bfs
,它調用search
並帶有一些參數以使其表現得像廣度優先搜索)。
所有類型信息在編譯過程中都被擦除:在運行時,值不會在內存中與其類型標記在一起,也不存在所有類型類實例的表示。這使得這種檢查不可能。如果需要這些信息,則程序員必須明確要求保留它,例如,像丹尼爾瓦格納下面的習慣課程一樣。 – chi