找出类型同义词的类型

凯文·梅瑞迪斯(Kevin Meredith)

我在Haskell中做了一个类型同义词:

Prelude> type Foo a = [a]

然后,我检查了它的类型:

Prelude> :t [5] :: Foo Integer
[5] :: Foo Integer :: Foo Integer

当然Foo a[a]因为我刚写过,所以我知道这是类型的同义词

但是,如果我使用返回的库,Foo Integer我怎么知道是什么Foo

我尝试:t Foo没有成功。

大师级

尝试这个: :i Foo

:i提供有关绑定符号的信息。
:t提供表达式的类型签名。(这就是为什么它对您不起作用的原因-Foo不是表达式,就像函数或值一样)。

例:

ghci> :i String
type String = [Char]    -- Defined in ‘GHC.Base’

这是奖金信息:

:i对ADT来说也很棒,它将为您提供构造函数+告诉您它们派生出哪些实例(当然是从导入的模块中获得的)。例如:

ghci> :i Bool
data Bool = False | True    -- Defined in ‘GHC.Types’
instance Bounded Bool -- Defined in ‘GHC.Enum’
instance Enum Bool -- Defined in ‘GHC.Enum’
instance Eq Bool -- Defined in ‘GHC.Classes’
instance Ord Bool -- Defined in ‘GHC.Classes’
instance Read Bool -- Defined in ‘GHC.Read’
instance Show Bool -- Defined in ‘GHC.Show’

而且对于类型类来说也很棒,例如:

ghci> :i Monad
class Monad (m :: * -> *) where
  (>>=) :: m a -> (a -> m b) -> m b
  (>>) :: m a -> m b -> m b
  return :: a -> m a
  fail :: String -> m a
    -- Defined in ‘GHC.Base’
instance Monad Maybe -- Defined in ‘Data.Maybe’
instance Monad (Either e) -- Defined in ‘Data.Either’
instance Monad [] -- Defined in ‘GHC.Base’
instance Monad IO -- Defined in ‘GHC.Base’
instance Monad ((->) r) -- Defined in ‘GHC.Base’

并且,如上所述,它还可以用于功能:

ghci> :i id
id :: a -> a    -- Defined in ‘GHC.Base’

它几乎完全一样:t,只是它还会告诉您该符号在哪个模块中定义。

那为什么要使用:t呢?它更灵活。:i仅适用于绑定符号。例如:t (+5)有效。:i (+5)不是。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

类型同义词导致类型错误

来自分类Dev

在haskell中查找类型同义词

来自分类Dev

让Haskell区分类型同义词

来自分类Dev

使用类型同义词定义实例

来自分类Dev

定义类型同义词(GHC)的类型同义词时出现奇怪的错误

来自分类Dev

在类型声明映射中使用类型同义词

来自分类Dev

类型族作为类型同义词的参数

来自分类Dev

为什么关联的类型同义词不暗示约束

来自分类Dev

我的Haskell类型同义词有什么问题?

来自分类Dev

基于lambda / church布尔值的类型同义词

来自分类Dev

使用模板Haskell获取关联的类型同义词

来自分类Dev

如何在实例声明中使用类型同义词?

来自分类Java

Java泛型和类型同义词

来自分类Dev

一个类中的多个类型同义词

来自分类Dev

使用特定的类定义类型同义词

来自分类Dev

如何为类型类名称创建同义词?

来自分类Dev

Purescript 将类视为循环类型同义词

来自分类Dev

Haskell术语:类型与数据类型的含义,它们是同义词吗?

来自分类Dev

模式同义词无法统一类型级别列表中的类型

来自分类Dev

由类型同义词中的函数依赖项绑定的“自由”类型变量

来自分类Dev

无法制作具有类型同义词的对象:类型

来自分类Dev

您为什么不能(完全)应用带有使用其他类型同义词的参数的类型同义词?

来自分类Dev

我可以轻松地将我的元组类型同义词设为Read的实例吗?

来自分类Dev

模式同义词能否在每个方向都有不同的类型签名,就像数字文字那样?

来自分类Dev

如何为F#中的各种角色定义int,float等的类型同义词?

来自分类Dev

Haskell中是否可能有健忘的类型同义词?

来自分类Dev

是否存在部分类型同义词实例的Haskell(GHC)扩展?

来自分类Dev

Data.Semigroup中的ArgMin和ArgMax类型同义词的目的是什么?

来自分类Dev

Haskell:实例中的非法类型同义词系列应用程序

Related 相关文章

  1. 1

    类型同义词导致类型错误

  2. 2

    在haskell中查找类型同义词

  3. 3

    让Haskell区分类型同义词

  4. 4

    使用类型同义词定义实例

  5. 5

    定义类型同义词(GHC)的类型同义词时出现奇怪的错误

  6. 6

    在类型声明映射中使用类型同义词

  7. 7

    类型族作为类型同义词的参数

  8. 8

    为什么关联的类型同义词不暗示约束

  9. 9

    我的Haskell类型同义词有什么问题?

  10. 10

    基于lambda / church布尔值的类型同义词

  11. 11

    使用模板Haskell获取关联的类型同义词

  12. 12

    如何在实例声明中使用类型同义词?

  13. 13

    Java泛型和类型同义词

  14. 14

    一个类中的多个类型同义词

  15. 15

    使用特定的类定义类型同义词

  16. 16

    如何为类型类名称创建同义词?

  17. 17

    Purescript 将类视为循环类型同义词

  18. 18

    Haskell术语:类型与数据类型的含义,它们是同义词吗?

  19. 19

    模式同义词无法统一类型级别列表中的类型

  20. 20

    由类型同义词中的函数依赖项绑定的“自由”类型变量

  21. 21

    无法制作具有类型同义词的对象:类型

  22. 22

    您为什么不能(完全)应用带有使用其他类型同义词的参数的类型同义词?

  23. 23

    我可以轻松地将我的元组类型同义词设为Read的实例吗?

  24. 24

    模式同义词能否在每个方向都有不同的类型签名,就像数字文字那样?

  25. 25

    如何为F#中的各种角色定义int,float等的类型同义词?

  26. 26

    Haskell中是否可能有健忘的类型同义词?

  27. 27

    是否存在部分类型同义词实例的Haskell(GHC)扩展?

  28. 28

    Data.Semigroup中的ArgMin和ArgMax类型同义词的目的是什么?

  29. 29

    Haskell:实例中的非法类型同义词系列应用程序

热门标签

归档