{-# LANGUAGE LambdaCase #-} import BashTree import PerlTree import System.Environment (getArgs) main :: IO () main = do getArgs >>= \case [] -> do putStrLn "No animation name provided" putStrLn animationChoiceList [animationName] -> case [ action | (nm, _, action) <- animations, nm == animationName ] of [] -> do putStrLn "No animation with that name!" putStrLn animationChoiceList [ action ] -> action _ -> error "More than one animation with the same name" _ -> do putStrLn "Please only provide the name of one animation" putStrLn animationChoiceList animations :: [(String, String, IO ())] animations = [ ("xmas-0", "Christmas tree, based on https://github.com/sergiolepore/ChristBASHTree", drawBashTree) , ("xmas-1", "Christmas tree, based on https://github.com/rcaputo/acme-poe-tree", drawPerlTree) ] animationChoiceList :: String animationChoiceList = "\nChoices:\n"++ unlines [ " "++name++" - "++description | (name, description, _) <- animations ]