【发布时间】:2010-06-22 03:01:51
【问题描述】:
我在下面的“试用”定义上有一个模棱两可的类型变量错误,我想知道是否有什么办法可以使这种情况起作用?我真的只想处理实例而不是显式数据类型(例如下面包含的 MO1、MO2)。
module Tc102 where
class (Show a, Read a) => MyObj a where
alpha :: a->String
beta :: a->Int
data MO1 = MO1 { a1 :: String, b1 :: Int } deriving (Show,Read)
data MO2 = MO2 { a2 :: String, b2 :: Int } deriving (Show,Read)
instance MyObj MO1 where
alpha = a1
beta = b1
instance MyObj MO2 where
alpha = a2
beta = b2
a = MO1 "a" 3
b = MO2 "b" 4
test :: MyObj a => a->String
test = alpha
showMe :: (MyObj a)=> a -> String
showMe = show
readMe :: (MyObj a) => String -> a
readMe = read
trial :: MyObj a => a -> String
trial = test . readMe . showMe
提前谢谢大家!但是我担心我可能需要使用一个辅助函数,将旧 ADT 转换为“最新版本”......
西蒙
编辑为了澄清,假设我首先显示到文件,然后重新加载对象。那么我拥有的功能更像
trial :: String -> Int
trial s = beta x
where x = readMe s
【问题讨论】:
标签: haskell instance typeclass