Search code examples
haskellghci

What does [safe] marker mean in 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'

What does [safe] mean?


Solution

  • It simply means that the datatype is defined in a module which is defined using safe extension. You can find the details of the extension in the user guide.

    In fact, you can test that yourself by defining a module using the Safe extension:

    {-#LANGUAGE Safe#-}
    
    data Test = Test deriving (Eq, Show)
    

    And then trying it out in ghci:

    λ> :i Test
    data Test = Test    
    instance [safe] Eq Test 
    instance [safe] Show Test 
    

    But note that in the current GHC (7.10.2), the safe extension cannot be relied of the trust guarantee because of this ghc bug.