gpt4 book ai didi

haskell - Haskell中IO的签名(是这个类还是数据?)

转载 作者:行者123 更新时间:2023-12-02 02:30:53 24 4
gpt4 key购买 nike

问题不是什么IO确实如此,但它是如何定义的,它的签名。具体来说,是这个数据还是类,那么“a”是它的类型参数吗?我在任何地方都没有找到它。另外,我不明白这个的语法含义:

f :: IO a

最佳答案

您问是否 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>

在 ghci 中, :i:info告诉你一个类型。它显示类型声明及其定义位置。你可以看到 IOMonadFunctor也。

这种技术对普通的 Haskell 类型更有用——正如其他人所指出的, IO是 Haskell 中的魔法。在典型的 Haskell 类型中,类型签名非常具有启发性,但重要的是要了解 IO不是它的类型声明,而是 IO实际执行的操作 IO .他们以非常传统的方式执行此操作,通常通过调用底层 C 或 OS 例程。例如,Haskell 的 putChar操作可能会调用 C 的 putchar功能。

关于haskell - Haskell中IO的签名(是这个类还是数据?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18295211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com