realWorld#在哪里定义?

时间:2015-09-19 20:21:00

标签: haskell ghc

unsafeDupablePerformIOsourcedocs)的定义中,我找到了对唯一realWorld#的引用。所以我想知道以#结尾的所有这些函数或值的定义在哪里?我当然已找到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]

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

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

1 个答案:

答案 0 :(得分:6)

realWorld#State# RealWorld类型的值,它是作为“真实世界”引用的标记。 (有趣的是,它的大小为0,并且不占用堆栈或堆上的任何空间。)

一些背景资料。 State# RealWorld值表示程序的整个外部运行时状态。 “现实世界”,就像它一样。程序中的main值会收到State# RealWorld值,该值贯穿构成它的IO操作。 realWorld#是评估unsafeDupablePerformIO值时的值。

关于它的定义,它是here,无论你有什么好处。 :)