{-# LANGUAGE LambdaCase #-} module Jikka.Main.Target where import Jikka.Common.Error data Target = PythonTarget | RestrictedPythonTarget | CoreTarget | CPlusPlusTarget deriving (Target -> Target -> Bool (Target -> Target -> Bool) -> (Target -> Target -> Bool) -> Eq Target forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Target -> Target -> Bool $c/= :: Target -> Target -> Bool == :: Target -> Target -> Bool $c== :: Target -> Target -> Bool Eq, Eq Target Eq Target -> (Target -> Target -> Ordering) -> (Target -> Target -> Bool) -> (Target -> Target -> Bool) -> (Target -> Target -> Bool) -> (Target -> Target -> Bool) -> (Target -> Target -> Target) -> (Target -> Target -> Target) -> Ord Target Target -> Target -> Bool Target -> Target -> Ordering Target -> Target -> Target forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a min :: Target -> Target -> Target $cmin :: Target -> Target -> Target max :: Target -> Target -> Target $cmax :: Target -> Target -> Target >= :: Target -> Target -> Bool $c>= :: Target -> Target -> Bool > :: Target -> Target -> Bool $c> :: Target -> Target -> Bool <= :: Target -> Target -> Bool $c<= :: Target -> Target -> Bool < :: Target -> Target -> Bool $c< :: Target -> Target -> Bool compare :: Target -> Target -> Ordering $ccompare :: Target -> Target -> Ordering $cp1Ord :: Eq Target Ord, Int -> Target -> ShowS [Target] -> ShowS Target -> String (Int -> Target -> ShowS) -> (Target -> String) -> ([Target] -> ShowS) -> Show Target forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Target] -> ShowS $cshowList :: [Target] -> ShowS show :: Target -> String $cshow :: Target -> String showsPrec :: Int -> Target -> ShowS $cshowsPrec :: Int -> Target -> ShowS Show, ReadPrec [Target] ReadPrec Target Int -> ReadS Target ReadS [Target] (Int -> ReadS Target) -> ReadS [Target] -> ReadPrec Target -> ReadPrec [Target] -> Read Target forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [Target] $creadListPrec :: ReadPrec [Target] readPrec :: ReadPrec Target $creadPrec :: ReadPrec Target readList :: ReadS [Target] $creadList :: ReadS [Target] readsPrec :: Int -> ReadS Target $creadsPrec :: Int -> ReadS Target Read) parseTarget :: String -> Either Error Target parseTarget :: String -> Either Error Target parseTarget = \case String "python" -> Target -> Either Error Target forall (m :: * -> *) a. Monad m => a -> m a return Target PythonTarget String "rpython" -> Target -> Either Error Target forall (m :: * -> *) a. Monad m => a -> m a return Target RestrictedPythonTarget String "core" -> Target -> Either Error Target forall (m :: * -> *) a. Monad m => a -> m a return Target CoreTarget String "cxx" -> Target -> Either Error Target forall (m :: * -> *) a. Monad m => a -> m a return Target CPlusPlusTarget String s -> String -> Either Error Target forall (m :: * -> *) a. MonadError Error m => String -> m a throwCommandLineError (String -> Either Error Target) -> String -> Either Error Target forall a b. (a -> b) -> a -> b $ String "invalid target: " String -> ShowS forall a. [a] -> [a] -> [a] ++ String s