假设我有两个以
开头的类型类层次结构class Animal a where ...
class Fruit f where ...
我想定义一个ad hoc多态函数
eat :: (Animal a, Fruit f) => a -> f -> Int
计算动物吃水果时恢复的健康量。 ad hoc,我的意思是我想为几个类型子类的组合编码eat
的特化,例如
eat :: (Bird a, Nut f) => a -> f -> Int
eat b n = ...
当我调用eat x y
时,我希望编译器针对eat
和x
的类型执行y
的最具体的已知实现。如果没有找到这样的类型类组合,那就让它抛出异常。
这可能在Haskell中吗?