{-# OPTIONS_GHC -Wno-orphans #-}

module Polysemy.Check.Orphans () where

import Generics.Kind.TH
import Polysemy
import Polysemy.Error
import Polysemy.Fail
import Polysemy.Fixpoint
import Polysemy.Input
import Polysemy.NonDet
import Polysemy.Output
import Polysemy.Reader
import Polysemy.Resource
import Polysemy.State
import Polysemy.Tagged
import Polysemy.Trace
import Polysemy.Writer

deriveGenericK ''Embed
deriveGenericK ''Error
deriveGenericK ''Fail
deriveGenericK ''Fixpoint
deriveGenericK ''Input
deriveGenericK ''NonDet
deriveGenericK ''Output
deriveGenericK ''Reader
deriveGenericK ''Resource
deriveGenericK ''State
deriveGenericK ''Tagged
deriveGenericK ''Trace
deriveGenericK ''Writer

deriving instance Show s => Show (State s (Sem r) a)
deriving instance Show o => Show (Output o (Sem r) a)
deriving instance Show (Input i (Sem r) a)
deriving instance Show (Fail (Sem r) a)
deriving instance Show (Trace (Sem r) a)

instance Show e => Show (Error e (Sem r) a) where
  show :: Error e (Sem r) a -> String
show (Throw e
e2) = String
"Throw " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> e -> String
forall a. Show a => a -> String
show e
e2
  show (Catch Sem r a
_ e -> Sem r a
_) = String
"Catch <m> <k>"

instance Show (Reader e (Sem r) a) where
  show :: Reader e (Sem r) a -> String
show Reader e (Sem r) a
Ask = String
"Ask"
  show (Local e -> e
_ Sem r a
_) = String
"Local <f> <m>"

instance Show e => Show (Writer e (Sem r) a) where
  show :: Writer e (Sem r) a -> String
show (Tell e
e) = String
"Tell " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> e -> String
forall a. Show a => a -> String
show e
e
  show (Listen Sem r a1
_) = String
"Listen <m>"
  show (Pass Sem r (e -> e, a)
_) = String
"Pass <m>"