如果我想在问题空间上执行搜索并且想跟踪节点已经访问过的不同状态,我需要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