packages feed

gigaparsec-0.2.2.0: src/Text/Gigaparsec/Internal/Require.hs

{-# LANGUAGE Safe #-}
{-# OPTIONS_HADDOCK hide #-}
{-# OPTIONS_GHC -Wno-all-missed-specialisations #-}
module Text.Gigaparsec.Internal.Require (require, RequirementUnsatisfied) where

import Control.Exception (Exception, throw)

type RequirementUnsatisfied :: *
data RequirementUnsatisfied = RequirementUnsatisfied { func :: !String
                                                     , msg :: !String
                                                     }

instance Show RequirementUnsatisfied where
  show :: RequirementUnsatisfied -> String
  show RequirementUnsatisfied{..} = "requirement unsatisfied, " ++ msg ++ " (" ++ func ++ ")"

instance Exception RequirementUnsatisfied

require :: Bool -> String -> String -> a -> a
require True _ _ = id
require False func msg = throw (RequirementUnsatisfied func msg)