Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 找出一个类型同义词';s型_Haskell - Fatal编程技术网

Haskell 找出一个类型同义词';s型

Haskell 找出一个类型同义词';s型,haskell,Haskell,我在Haskell中创建了一个类型同义词: Prelude> type Foo a = [a] 然后,我检查了它的类型: Prelude> :t [5] :: Foo Integer [5] :: Foo Integer :: Foo Integer 当然,我知道fooa是[a]的类型同义词,因为我刚刚编写了它 但是,如果我正在使用一个返回Foo Integer的库,我怎么知道Foo是什么 我尝试了:t Foo,但没有成功。试试这个::I Foo :i提供有关绑定符号的信息。 :

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

Prelude> type Foo a = [a]
然后,我检查了它的类型:

Prelude> :t [5] :: Foo Integer
[5] :: Foo Integer :: Foo Integer
当然,我知道
fooa
[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 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)
有效<代码>:我(+5)不是。

一个彻底的答案!:)使用
:善良以计算类型级别表达式。