2014-10-09 66 views
4

在下面的图片我们可以看到,RealFloat是浮动的,这又是分数等的实例的实例...如何查找类型类的祖先?

对于Haskell中任何类型的类,我们怎样才能找到所有的“父母”?

enter image description here

+0

看代码/文档? Haskell没有开箱即用的反射。 – 2014-10-09 12:08:32

回答

6

只需使用ghci的解释。为了证明你的例子:

λ> :i RealFloat 
class (RealFrac a, Floating a) => RealFloat a where 
    floatRadix :: a -> Integer 
    floatDigits :: a -> Int 
    ..... 
instance Floating Float -- Defined in `GHC.Float' 
instance Floating Double -- Defined in `GHC.Float' 
λ> :i Floating 
class Fractional a => Floating a where 
    pi :: a 
    exp :: a -> a 
    ..... 

从上面的例子,你可以看到RealFloat如何与RealFracFloating以及如何Floating有关Fractional

+0

有没有办法打印这棵树easilly? – osager 2014-10-09 12:13:15

+0

@osager没有,我知道。这可能是一个有趣的周末项目。 :) – Sibi 2014-10-09 12:16:47

+1

我应该指出一点,除了数字类,Haskell类的层次结构往往很浅。 – MathematicalOrchid 2014-10-09 14:45:42