найти все типы, являющиеся экземплярами класса типов

Learnyouahaskell упоминает следующее:

Типы в классе Enum:

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

Есть ли способ узнать, какие типы являются экземплярами какого класса типов и наоборот в GHCi?

Я хочу что-то вроде :t, которое мы используем в GHCi, чтобы найти тип выражения.


person user1308560    schedule 21.09.2012    source источник


Ответы (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], напрямую.

Кроме того, обратите внимание, что он будет отображать только те экземпляры и типы, которые находятся в области видимости, поэтому вам может потребоваться импортировать то, что вам интересно.

person C. A. McCann    schedule 21.09.2012