realWorld#在哪里定义?

Mic*_*ael 2 haskell ghc

unsafeDupablePerformIO(来源,文档)的定义中,我找到了对唯一的引用realWorld#.所以我想知道所有这些以a结尾的函数或值是在哪里#定义的?我已经找到了GHC primops课程:它们包括seq#,catch#,retry#,和所有其他类型的有趣功能.它还包含一种RealWorld类型.但是这些初学者似乎并没有包含实际价值realWorld#.

{-# NOINLINE unsafeDupablePerformIO #-}
    -- See Note [unsafeDupablePerformIO is NOINLINE]
unsafeDupablePerformIO  :: IO a -> a
unsafeDupablePerformIO (IO m) = lazy (case m realWorld# of (# _, r #) -> r)
     -- See Note [unsafeDupablePerformIO has a lazy RHS]
Run Code Online (Sandbox Code Playgroud)

(请不要混合RealWorldrealWorld#:第一个是类型,第二个是值.)

GHC还有其他未记载的初学者吗?或者也许所有这些都记录在某处,我还没有找到它?我可以在GHC源中查看这些内容的实现情况吗?

Rei*_*chs 6

realWorld#是一个类型的值,State# RealWorld它是一个令牌,充当对"现实世界"的引用.(有趣的是,它的大小为0,并且不占用堆栈或堆上的任何空间.)

一些背景信息.State# RealWorldvalues表示程序的整个外部运行时状态."现实世界",就像它一样.该main程序中的值接收到State# RealWorld的是通过螺纹价值IO是构成它的行动.realWorld#unsafeDupablePerformIO评估值时的值.

关于它的定义,它就在这里,无论你有什么好处.:)