请原谅我,如果这是一个愚蠢的问题,但有一个代表所有功能的类型类吗?就像,让我说我有这样的类型
data Foo a = Thing a
instance (Show a) => Show (Foo a) where
show (Thing a) = show a
我想显示Thing (\x -> 1)
。也许对这个方法做一些反思,以便打印一些关于这个的元数据?
尝试它我收到以下错误
> Thing (\x -> 1)
<interactive>:113:1:
No instance for (Show (t0 -> a0)) arising from a use of `print'
Possible fix: add an instance declaration for (Show (t0 -> a0))
In a stmt of an interactive GHCi command: print it
<interactive>:113:14:
No instance for (Num a0) arising from the literal `1'
The type variable `a0' is ambiguous
Possible fix: add a type signature that fixes these type variable(s)
Note: there are several potential instances:
instance Num Double -- Defined in `GHC.Float'
instance Num Float -- Defined in `GHC.Float'
instance Integral a => Num (GHC.Real.Ratio a)
-- Defined in `GHC.Real'
...plus 11 others
In the expression: 1
In the first argument of `Thing', namely `(\ x -> 1)'
In the expression: Thing (\ x -> 1)
哪个有意义,因为show
没有t0 -> a0
的实例,但我不确定如何描述这个类型类的实例?
这不适用于任何制作,我只是在讨论Haskell并且好奇我能做什么,不能做什么。
答案 0 :(得分:4)
由于您的目标只是为了获得乐趣,您可能会喜欢Data.Universe.Instances.Show。但是,对于更严肃的目标,您可能希望等到Cloud Haskell项目取得一些进展,其目的部分是为了能够对函数进行序列化和反序列化,以便可以跨机器迁移它们。