{-# LANGUAGE DataKinds #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_HADDOCK not-home #-} -- | This module is intended for internal use only, and may change without -- warning in subsequent releases. module Optics.Internal.Magic where -- | How about a magic trick? I'm gonna make the coverage condition disappear. class Dysfunctional field k s t a b | field s -> k t a b , field t -> k s a b -- | Show something useful when type inference goes into a loop and stops with -- "reduction stack overflow" message (sometimes happens when trying to infer -- types of local bindings when monomorphism restriction is enabled). instance ( TypeInferenceLoop "Type inference for the local binding failed. Write the type" "signature yourself or disable monomorphism restriction with" "NoMonomorphismRestriction LANGUAGE pragma so GHC infers it." field k s t a b ) => Dysfunctional field k s t a b class TypeInferenceLoop msg1 msg2 msg3 field k s t a b | field s -> k t a b , field t -> k s a b -- | Including the instance head in the context lifts the coverage condition for -- all type variables in the instance. A dirty trick until we have -- https://github.com/ghc-proposals/ghc-proposals/pull/374 and can do it -- properly. instance ( TypeInferenceLoop msg1 msg2 msg3 field k s t a b ) => TypeInferenceLoop msg1 msg2 msg3 field k s t a b