代表函数的类型类

时间:2013-12-20 17:13:14

标签: haskell typeclass

请原谅我,如果这是一个愚蠢的问题,但有一个代表所有功能的类型类吗?就像,让我说我有这样的类型

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并且好奇我能做什么,不能做什么。

1 个答案:

答案 0 :(得分:4)

由于您的目标只是为了获得乐趣,您可能会喜欢Data.Universe.Instances.Show。但是,对于更严肃的目标,您可能希望等到Cloud Haskell项目取得一些进展,其目的部分是为了能够对函数进行序列化和反序列化,以便可以跨机器迁移它们。