pull Conv into core

This commit is contained in:
Stephen Diehl
2016-05-09 14:22:13 -04:00
parent a70f6e2d84
commit 75f5f4d88f
3 changed files with 77 additions and 8 deletions
+1
View File
@@ -43,6 +43,7 @@ library
List
Monad
Show
Conv
Either
Functor
Semiring
+75
View File
@@ -0,0 +1,75 @@
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances #-}
module Conv (
StringConv (..)
, toS
, toSL
, Leniency (..)
) where
import Data.ByteString.Char8 as B
import Data.ByteString.Lazy.Char8 as LB
import Data.Text as T
import Data.Text.Encoding as T
import Data.Text.Encoding.Error as T
import Data.Text.Lazy as LT
import Data.Text.Lazy.Encoding as LT
import Base
import Data.Eq (Eq(..))
import Data.Ord (Ord(..))
import Data.Function ((.), id)
import Data.String (String)
import Control.Applicative (pure)
data Leniency = Lenient | Strict
deriving (Eq,Show,Ord,Enum,Bounded)
class StringConv a b where
strConv :: Leniency -> a -> b
toS :: StringConv a b => a -> b
toS = strConv Strict
toSL :: StringConv a b => a -> b
toSL = strConv Lenient
instance StringConv String String where strConv _ = id
instance StringConv String B.ByteString where strConv _ = B.pack
instance StringConv String LB.ByteString where strConv _ = LB.pack
instance StringConv String T.Text where strConv _ = T.pack
instance StringConv String LT.Text where strConv _ = LT.pack
instance StringConv B.ByteString String where strConv _ = B.unpack
instance StringConv B.ByteString B.ByteString where strConv _ = id
instance StringConv B.ByteString LB.ByteString where strConv _ = LB.fromChunks . pure
instance StringConv B.ByteString T.Text where strConv = decodeUtf8T
instance StringConv B.ByteString LT.Text where strConv l = strConv l . LB.fromChunks . pure
instance StringConv LB.ByteString String where strConv _ = LB.unpack
instance StringConv LB.ByteString B.ByteString where strConv _ = B.concat . LB.toChunks
instance StringConv LB.ByteString LB.ByteString where strConv _ = id
instance StringConv LB.ByteString T.Text where strConv l = decodeUtf8T l . strConv l
instance StringConv LB.ByteString LT.Text where strConv = decodeUtf8LT
instance StringConv T.Text String where strConv _ = T.unpack
instance StringConv T.Text B.ByteString where strConv _ = T.encodeUtf8
instance StringConv T.Text LB.ByteString where strConv l = strConv l . T.encodeUtf8
instance StringConv T.Text LT.Text where strConv _ = LT.fromStrict
instance StringConv T.Text T.Text where strConv _ = id
instance StringConv LT.Text String where strConv _ = LT.unpack
instance StringConv LT.Text T.Text where strConv _ = LT.toStrict
instance StringConv LT.Text LT.Text where strConv _ = id
instance StringConv LT.Text LB.ByteString where strConv _ = LT.encodeUtf8
instance StringConv LT.Text B.ByteString where strConv l = strConv l . LT.encodeUtf8
decodeUtf8T :: Leniency -> B.ByteString -> T.Text
decodeUtf8T Lenient = T.decodeUtf8With T.lenientDecode
decodeUtf8T Strict = T.decodeUtf8With T.strictDecode
decodeUtf8LT :: Leniency -> LB.ByteString -> LT.Text
decodeUtf8LT Lenient = LT.decodeUtf8With T.lenientDecode
decodeUtf8LT Strict = LT.decodeUtf8With T.strictDecode
+1 -8
View File
@@ -27,6 +27,7 @@ import Monad as X
import Functor as X
import Either as X
import Applicative as X
import Conv as X
import Base as Base hiding (
putStr
@@ -279,14 +280,6 @@ import Data.Text.Lazy (
, fromStrict
)
import Data.String.Conv as X (
strConv
, toS
, toSL
, Leniency(..)
, StringConv
)
import Data.String as X (IsString)
-- Printf