问题不是什么IO,而是如何定义,它的签名.具体来说,这个数据或类是" a"它的类型参数呢?我没找到任何地方.另外,我不明白这个的句法意义:
f :: IO a
Run Code Online (Sandbox Code Playgroud)
Gar*_*thR 12
你问是否IO a是一种数据类型:它是.你询问它是否a是它的类型参数:它是.你说你找不到它的定义.让我告诉你如何找到它:
localhost:~ gareth.rowlands$ ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Prelude> :i IO
newtype IO a
= GHC.Types.IO (GHC.Prim.State# GHC.Prim.RealWorld
-> (# GHC.Prim.State# GHC.Prim.RealWorld, a #))
-- Defined in `GHC.Types'
instance Monad IO -- Defined in `GHC.Base'
instance Functor IO -- Defined in `GHC.Base'
Prelude>
Run Code Online (Sandbox Code Playgroud)
在ghci中,:i或者:info告诉你一个类型.它显示了类型声明及其定义的位置.你可以看到这IO是一个Monad也是一个Functor.
这种技术在普通的Haskell类型上更有用 - 正如其他人所指出的那样,IO在Haskell中是神奇的.在典型的Haskell类型中,类型签名非常具有启发性,但重要的是要知道IO的不是它的类型声明,而是IO实际执行的操作IO.他们以非常传统的方式执行此操作,通常通过调用底层的C或OS例程.例如,Haskell的putChar动作可能会调用C的putchar函数.
| 归档时间: |
|
| 查看次数: |
706 次 |
| 最近记录: |