【发布时间】:2014-10-01 06:28:03
【问题描述】:
我有两个 haskell 函数,可以在两种代数数据类型之间进行转换。
data Ab = A | B
data Cd = C | D
fromAb :: Ab -> Cd
fromAb A = C
fromAb B = D
toAb :: Cd -> Ab
toAb C = A
toAb D = B
但我想创建一个多态函数,它同时接受代数数据类型并在它们之间进行转换。
foo A = C
foo B = D
foo C = A
foo D = B
但 Haskell 从“foo A = C”推导出函数是
foo :: Ab -> Cd
我尝试将一个类的数据类型实例化为 foo 多态,但没有成功。
class Abcd a
instance Abcd Ab
instance Abcd Cd
foo :: Abcd a => a -> Ab
有什么想法吗?
【问题讨论】: