Unhelpful error messages about lifted and unlifted types
I wrote this code:
{-# LANGUAGE MagicHash #-}
import GHC.Prim
import GHC.Types
main = do
let primDouble = 0.42## :: Double#
let double = 0.42 :: Double
IO (\s -> mkWeakNoFinalizer# double () s)
and I get this error message:
WeakDouble.hs:8:15: error:
• Couldn't match a lifted type with an unlifted type
Expected type: (# State# RealWorld, Weak# () #)
Actual type: (# State# RealWorld, Weak# () #)
• In the expression: mkWeakNoFinalizer# double () s
In the first argument of ‘IO’, namely
‘(\ s -> mkWeakNoFinalizer# double () s)’
In a stmt of a 'do' block:
IO (\ s -> mkWeakNoFinalizer# double () s)
with -fprint-explicit-kinds. (Without the flag, it looks the same, but tells me to use this flag…).
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Type checker) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | goldfire |
| Operating system | |
| Architecture |