什么[安全]标记在ghci中意味着什么?

Zhe*_*lov 7 haskell ghci

Prelude Data.Void> :info Void
data Void       -- Defined in `Data.Void'
instance [safe] Eq Void -- Defined in `Data.Void'
instance [safe] Ord Void -- Defined in `Data.Void'
instance [safe] Read Void -- Defined in `Data.Void'
instance [safe] Show Void -- Defined in `Data.Void'
Run Code Online (Sandbox Code Playgroud)

[安全]是什么意思?

Sib*_*ibi 6

它只是意味着数据类型是在使用安全扩展定义的模块中定义的.您可以在用户指南中找到扩展程序的详细信息.

实际上,您可以通过使用Safe扩展名定义模块来自行测试:

{-#LANGUAGE Safe#-}

data Test = Test deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

然后尝试一下ghci:

?> :i Test
data Test = Test    
instance [safe] Eq Test 
instance [safe] Show Test 
Run Code Online (Sandbox Code Playgroud)

但请注意,在当前的GHC(7.10.2)中,由于此ghc错误,安全扩展不能依赖于信任保证.