首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找出类型同义词的类型

找出类型同义词的类型
EN

Stack Overflow用户
提问于 2014-09-07 13:46:39
回答 1查看 252关注 0票数 8

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

代码语言:javascript
复制
Prelude> type Foo a = [a]

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

代码语言:javascript
复制
Prelude> :t [5] :: Foo Integer
[5] :: Foo Integer :: Foo Integer

当然,我知道Foo a[a]的一个类型同义词,因为我刚刚写了它。

但是,如果我正在使用返回Foo Integer的库,我如何知道Foo是什么?

我尝试了:t Foo,但没有成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-07 13:49:28

试试这个::i Foo

:i提供有关绑定符号的信息。

:t为表达式提供类型签名。(这就是为什么它不适用于您-- Foo不是表达式,就像函数或值一样)。

示例:

代码语言:javascript
复制
ghci> :i String
type String = [Char]    -- Defined in ‘GHC.Base’

以下是奖金信息:

:i对于ADT来说也很棒,它将给您构造函数+告诉您它们派生的实例(当然是从导入的模块)。例如:

代码语言:javascript
复制
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’

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

代码语言:javascript
复制
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’

而且,如前所述,也可用于下列职能:

代码语言:javascript
复制
ghci> :i id
id :: a -> a    -- Defined in ‘GHC.Base’

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

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

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25710864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档