【发布时间】:2013-05-11 17:46:28
【问题描述】:
我有以下类型类
class MyClass c where
aFunction :: c -> Bool
两个不同数据类型的实例
data MyDataType1 = MyDataType1
instance MyClass MyDataType1 where
aFunction c = True
data MyDataType2 = MyDataType2
instance MyClass MyDataType2 where
aFunction c = False
我想编写一个函数,该函数接受类型类 MyClass 的两个参数(可能是相同的数据类型或可能不同并返回其中一个。我正在努力为此制定类型签名,我认为我可能采取了错误的方法。
这是正确的吗?如果不是,我应该改用什么?
chooseOne :: (MyClass a, MyClass b) => a -> b -> ?
chooseOne x y = if (aFunction x) then x else y
【问题讨论】:
-
您是否尝试过不使用类型签名并查看编译器是否能够推断出一个?提示:为什么你必须将
a和b声明为MyClass的单独实例?函数可以返回两种可能不同的类型吗?