import Data.Hashable (Hashable(..))
import Data.Int (Int)
import Data.List.NonEmpty (NonEmpty(..))
-import Data.Maybe (Maybe(..))
+import Data.Maybe (Maybe(..), fromMaybe)
import Data.Monoid (Monoid(..))
import Data.Ord (Ord(..))
import Data.Semigroup (Semigroup(..))
instance Show NCName where
showsPrec _p = showString . TL.unpack . unNCName
instance IsString NCName where
- fromString s
- | c:cs <- s
- , XC.isXmlNCNameStartChar c
- && all XC.isXmlNCNameChar cs
- = NCName (TL.pack s)
- | otherwise = error "Invalid XML NCName"
+ fromString s =
+ fromMaybe (error "Invalid XML NCName") $
+ ncName (TL.pack s)
+
+ncName :: TL.Text -> Maybe NCName
+ncName t =
+ case TL.uncons t of
+ Just (c, cs)
+ | XC.isXmlNCNameStartChar c
+ , TL.all XC.isXmlNCNameChar cs
+ -> Just (NCName t)
+ _ -> Nothing
poolNCNames :: [NCName]
poolNCNames =