{-# LANGUAGE UndecidableInstances #-} module Type.Error_old (module Type.Error_old, module X) where import GHC.TypeLits as X (ErrorMessage (ShowType, (:<>:), (:$$:)), TypeError) import GHC.TypeLits (ErrorMessage (Text)) -- === ErrMsg === -- type ErrMsg = 'Text -- === Assertions === -- class Assert (ok :: Bool) (err :: ErrorMessage) instance Assert 'True err instance TypeError err => Assert 'False err type Assert' ok = Assert ok (ErrMsg "Assertion failed.") -- === Formatters === -- type Sentence a = a :<>: ErrMsg "." type Ticked a = Between' "`" a type Parensed a = Between "(" ")" a type Between l r a = ErrMsg l :<>: a :<>: ErrMsg r type Between' s a = Between s s a type a :: b = a :<>: ErrMsg " " :<>: b