packages feed

fortran-vars-0.1.0: src/Language/Fortran/Vars/Errors.hs

module Language.Fortran.Vars.Errors
  ( invalidArg'
  , invalidArg
  )
where

import           Data.List                      ( foldl' )

-- | Given a function name and arguments, generate an
-- error message for invalid arguments
genError :: Show a => String -> [a] -> String
genError funcName args =
  let
    argMsg = case args of
      []     -> ""
      [ x ]  -> " - " ++ show x
      x : xs -> "s - " ++ foldl' (\acc y -> acc ++ ", " ++ show y) (show x) xs
  in  funcName ++ " : invalid argument" ++ argMsg

-- | Function to return an error case when an unappropriate arguemnt is
-- passed to some function or when some pattern match issue occurs
invalidArg' :: Show a => String -> [a] -> Either String b
invalidArg' funcName args = Left $ genError funcName args

-- | Function to throw an error when an unappropriate arguemnt is
-- passed to some function or when some pattern match issue occurs
invalidArg :: Show a => String -> [a] -> b
invalidArg funcName args = error $ genError funcName args