【问题标题】:find all types that are instances of a typeclass查找作为类型类实例的所有类型
【发布时间】:2012-09-21 21:30:25
【问题描述】:

learnyouahaskellmentions the following:

Enum 类中的类型是

(), Bool, Char, Ordering, Int, Integer, Float and Double

有什么方法可以在 GHCi 中找到哪些类型是哪个类型类的实例,反之亦然?

我想要像 :t 这样的东西,我们在 GHCi 中使用它来查找表达式的类型。

【问题讨论】:

    标签: haskell types typeclass ghci


    【解决方案1】:

    当然。

    对于类型类:

    Prelude> :i Enum
    class Enum a where
      succ :: a -> a
      pred :: a -> a
      toEnum :: Int -> a
      fromEnum :: a -> Int
      enumFrom :: a -> [a]
      enumFromThen :: a -> a -> [a]
      enumFromTo :: a -> a -> [a]
      enumFromThenTo :: a -> a -> a -> [a]
        -- Defined in `GHC.Enum'
    instance Enum Ordering -- Defined in `GHC.Enum'
    instance Enum Integer -- Defined in `GHC.Enum'
    instance Enum Int -- Defined in `GHC.Enum'
    instance Enum Char -- Defined in `GHC.Enum'
    instance Enum Bool -- Defined in `GHC.Enum'
    instance Enum () -- Defined in `GHC.Enum'
    instance Enum Float -- Defined in `GHC.Float'
    instance Enum Double -- Defined in `GHC.Float'
    

    对于一个类型:

    Prelude> :i Integer
    data Integer
      = integer-gmp:GHC.Integer.Type.S# GHC.Prim.Int#
      | integer-gmp:GHC.Integer.Type.J# GHC.Prim.Int# GHC.Prim.ByteArray#
        -- Defined in `integer-gmp:GHC.Integer.Type'
    instance Enum Integer -- Defined in `GHC.Enum'
    instance Eq Integer -- Defined in `integer-gmp:GHC.Integer.Type'
    instance Integral Integer -- Defined in `GHC.Real'
    instance Num Integer -- Defined in `GHC.Num'
    instance Ord Integer -- Defined in `integer-gmp:GHC.Integer.Type'
    instance Read Integer -- Defined in `GHC.Read'
    instance Real Integer -- Defined in `GHC.Real'
    instance Show Integer -- Defined in `GHC.Show'
    instance Ix Integer -- Defined in `GHC.Arr'
    

    不幸的是,这仅限于标识符,而不是表达式。因此,您无法直接查找哪些实例适用于 [Char] 之类的类型。

    另外,请注意,它只会显示范围内的实例和类型,因此您可能需要导入您感兴趣的内容。

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多