diff options
Diffstat (limited to 'libraries/ghc-prim/GHC/Magic/Dict.hs')
-rw-r--r-- | libraries/ghc-prim/GHC/Magic/Dict.hs | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/libraries/ghc-prim/GHC/Magic/Dict.hs b/libraries/ghc-prim/GHC/Magic/Dict.hs index 12861db568..560ab3956f 100644 --- a/libraries/ghc-prim/GHC/Magic/Dict.hs +++ b/libraries/ghc-prim/GHC/Magic/Dict.hs @@ -1,7 +1,7 @@ {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE ImpredicativeTypes #-} -{-# LANGUAGE MagicHash #-} +{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE RankNTypes #-} @@ -18,7 +18,7 @@ -- Portability : non-portable (GHC Extensions) -- -- Defines the 'withDict' function. For more information, see --- @Note [withDict]@ in "GHC.HsToCore.Expr" in GHC. +-- @Note [withDict]@ in "GHC.Tc.Instance.Class" in GHC. -- The definition of 'withDict' is located in a separate module from -- "GHC.Magic" because 'withDict' is @Unsafe@ (it threatens type class -- coherence) while "GHC.Magic" is @Trustworthy@. @@ -28,9 +28,8 @@ -- ----------------------------------------------------------------------------- -module GHC.Magic.Dict (withDict) where +module GHC.Magic.Dict (WithDict(..)) where -import GHC.Prim.Panic (panicError) import GHC.Types (RuntimeRep, TYPE) -- | @'withDict' d f@ provides a way to call a type-class–overloaded function @@ -38,7 +37,6 @@ import GHC.Types (RuntimeRep, TYPE) -- -- 'withDict' can only be used if the type class has a single method with no -- superclasses. For more (important) details on how this works, see --- @Note [withDict]@ in "GHC.HsToCore.Expr" in GHC. -withDict :: forall {rr :: RuntimeRep} st dt (r :: TYPE rr). st -> (dt => r) -> r -{-# NOINLINE withDict #-} -withDict = panicError "Non-rewritten withDict"# +-- @Note [withDict]@ in "GHC.Tc.Instance.Class" in GHC. +class WithDict cls meth where + withDict :: forall {rr :: RuntimeRep} (r :: TYPE rr). meth -> (cls => r) -> r |