{-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TemplateHaskell #-} module ByteString (ByteString) where import Data.ByteString.Char8 (ByteString, pack) import qualified Data.ByteString as BS import Data.Char import Language.Haskell.TH.Syntax import ValidLiterals instance Validate String ByteString where fromLiteralWithError s = case nonAsciiVals of [] -> Right $ pack s _ -> Left $ "Found non-ASCII values: " ++ show nonAsciiVals where nonAsciiVals = filter (not . (<=255) . ord) s -- As of template-haskell-2.16.0.0 we no longer need to rely on the hack of -- unsafeTExpCoerce! #if MIN_VERSION_template_haskell(2,16,0) liftResult _ v = [|| BS.pack $$(liftTyped (BS.unpack v)) ||] #else liftResult _ v = unsafeTExpCoerce $ AppE <$> [| BS.pack |] <*> lift (BS.unpack v) #endif