{-# LANGUAGE ConstraintKinds #-} module JVM.Data.Convert.Monad where import Data.Word (Word16) import Effectful import Effectful.Error.Static import JVM.Data.Abstract.Builder.Label import JVM.Data.Convert.ConstantPool (ConstantPool, ConstantPoolState, runConstantPool) type ConvertEff r = (ConstantPool :> r, Error CodeConverterError :> r) runConvertM :: Eff (ConstantPool : Error CodeConverterError : r) a -> Eff r (Either CodeConverterError (a, ConstantPoolState)) runConvertM :: forall (r :: [(* -> *) -> * -> *]) a. Eff (ConstantPool : Error CodeConverterError : r) a -> Eff r (Either CodeConverterError (a, ConstantPoolState)) runConvertM = (Either (CallStack, CodeConverterError) (a, ConstantPoolState) -> Either CodeConverterError (a, ConstantPoolState)) -> Eff r (Either (CallStack, CodeConverterError) (a, ConstantPoolState)) -> Eff r (Either CodeConverterError (a, ConstantPoolState)) forall a b. (a -> b) -> Eff r a -> Eff r b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Either (CallStack, CodeConverterError) (a, ConstantPoolState) -> Either CodeConverterError (a, ConstantPoolState) forall {a} {a} {b}. Either (a, a) b -> Either a b mapLeft (Eff r (Either (CallStack, CodeConverterError) (a, ConstantPoolState)) -> Eff r (Either CodeConverterError (a, ConstantPoolState))) -> (Eff (ConstantPool : Error CodeConverterError : r) a -> Eff r (Either (CallStack, CodeConverterError) (a, ConstantPoolState))) -> Eff (ConstantPool : Error CodeConverterError : r) a -> Eff r (Either CodeConverterError (a, ConstantPoolState)) forall b c a. (b -> c) -> (a -> b) -> a -> c . Eff (Error CodeConverterError : r) (a, ConstantPoolState) -> Eff r (Either (CallStack, CodeConverterError) (a, ConstantPoolState)) forall e (es :: [(* -> *) -> * -> *]) a. HasCallStack => Eff (Error e : es) a -> Eff es (Either (CallStack, e) a) runError (Eff (Error CodeConverterError : r) (a, ConstantPoolState) -> Eff r (Either (CallStack, CodeConverterError) (a, ConstantPoolState))) -> (Eff (ConstantPool : Error CodeConverterError : r) a -> Eff (Error CodeConverterError : r) (a, ConstantPoolState)) -> Eff (ConstantPool : Error CodeConverterError : r) a -> Eff r (Either (CallStack, CodeConverterError) (a, ConstantPoolState)) forall b c a. (b -> c) -> (a -> b) -> a -> c . Eff (ConstantPool : Error CodeConverterError : r) a -> Eff (Error CodeConverterError : r) (a, ConstantPoolState) forall (r :: [(* -> *) -> * -> *]) a. Eff (ConstantPool : r) a -> Eff r (a, ConstantPoolState) runConstantPool where mapLeft :: Either (a, a) b -> Either a b mapLeft (Left (a _, a e)) = a -> Either a b forall a b. a -> Either a b Left a e mapLeft (Right b b) = b -> Either a b forall a b. b -> Either a b Right b b data CodeConverterError = DuplicateLabel Label Word16 | UnmarkedLabel Label deriving (Int -> CodeConverterError -> ShowS [CodeConverterError] -> ShowS CodeConverterError -> String (Int -> CodeConverterError -> ShowS) -> (CodeConverterError -> String) -> ([CodeConverterError] -> ShowS) -> Show CodeConverterError forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> CodeConverterError -> ShowS showsPrec :: Int -> CodeConverterError -> ShowS $cshow :: CodeConverterError -> String show :: CodeConverterError -> String $cshowList :: [CodeConverterError] -> ShowS showList :: [CodeConverterError] -> ShowS Show)