Skip to content

Commit

Permalink
Merge pull request #9 from nikita-volkov/master
Browse files Browse the repository at this point in the history
Plentiful instances for the "text" and "bytestring" libraries
  • Loading branch information
zenzike committed Apr 6, 2015
2 parents 0f8a62b + b101b1f commit e742927
Show file tree
Hide file tree
Showing 2 changed files with 181 additions and 37 deletions.
195 changes: 173 additions & 22 deletions Data/Convertible/Instances/Text.hs
Original file line number Diff line number Diff line change
Expand Up @@ -30,55 +30,206 @@ where

import Data.Convertible.Base
import qualified Data.Text as TS
import qualified Data.Text.Encoding as TE
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Builder as TLB
import qualified Data.Text.Lazy.Encoding as TLE
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BL
import qualified Data.ByteString.Builder as BB
import Data.Word (Word8)
import Data.Foldable

-- Text

instance Convertible [Char] TS.Text where
safeConvert = Right . TS.pack

instance Convertible TS.Text [Char] where
{-# INLINE safeConvert #-}
safeConvert = Right . TS.unpack

instance Convertible [Char] TL.Text where
safeConvert = Right . TL.pack
instance Convertible TS.Text TL.Text where
{-# INLINE safeConvert #-}
safeConvert = Right . TL.fromStrict

instance Convertible TS.Text TLB.Builder where
{-# INLINE safeConvert #-}
safeConvert = Right . TLB.fromText

instance Convertible TS.Text BS.ByteString where
{-# INLINE safeConvert #-}
safeConvert = Right . TE.encodeUtf8

instance Convertible TS.Text BL.ByteString where
{-# INLINE safeConvert #-}
safeConvert = Right . BL.fromStrict . TE.encodeUtf8

instance Convertible TS.Text BB.Builder where
{-# INLINE safeConvert #-}
#if MIN_VERSION_text(1,2,0)
safeConvert = Right . TE.encodeUtf8Builder
#else
safeConvert = safeConvert . TE.encodeUtf8
#endif



instance Convertible TL.Text [Char] where
{-# INLINE safeConvert #-}
safeConvert = Right . TL.unpack

#if MIN_VERSION_text(0,8,1)
instance Convertible TS.Text TL.Text where
safeConvert = Right . TL.fromStrict

instance Convertible TL.Text TS.Text where
{-# INLINE safeConvert #-}
safeConvert = Right . TL.toStrict
#else
instance Convertible TS.Text TL.Text where
safeConvert = Right . TL.fromChunks . (:[])

instance Convertible TL.Text TS.Text where
safeConvert = Right . TS.concat . TL.toChunks
instance Convertible TL.Text TLB.Builder where
{-# INLINE safeConvert #-}
safeConvert = Right . TLB.fromLazyText

instance Convertible TL.Text BS.ByteString where
{-# INLINE safeConvert #-}
safeConvert = safeConvert . TLE.encodeUtf8

instance Convertible TL.Text BL.ByteString where
{-# INLINE safeConvert #-}
safeConvert = Right . TLE.encodeUtf8

instance Convertible TL.Text BB.Builder where
{-# INLINE safeConvert #-}
#if MIN_VERSION_text(1,2,0)
safeConvert = Right . TLE.encodeUtf8Builder
#else
safeConvert = safeConvert . TLE.encodeUtf8
#endif

-- ByteString

instance Convertible [Word8] BS.ByteString where
safeConvert = Right . BS.pack

instance Convertible TLB.Builder [Char] where
{-# INLINE safeConvert #-}
safeConvert = safeConvert . TLB.toLazyText

instance Convertible TLB.Builder TS.Text where
{-# INLINE safeConvert #-}
safeConvert = safeConvert . TLB.toLazyText

instance Convertible TLB.Builder TL.Text where
{-# INLINE safeConvert #-}
safeConvert = Right . TLB.toLazyText

instance Convertible TLB.Builder BS.ByteString where
{-# INLINE safeConvert #-}
safeConvert = safeConvert . TLB.toLazyText

instance Convertible TLB.Builder BL.ByteString where
{-# INLINE safeConvert #-}
safeConvert = safeConvert . TLB.toLazyText

instance Convertible TLB.Builder BB.Builder where
{-# INLINE safeConvert #-}
safeConvert = safeConvert . TLB.toLazyText



instance Convertible BS.ByteString [Word8] where
{-# INLINE safeConvert #-}
safeConvert = Right . BS.unpack

instance Convertible [Word8] BL.ByteString where
safeConvert = Right . BL.pack
instance Convertible BS.ByteString TS.Text where
{-# INLINE safeConvert #-}
safeConvert = Right . TE.decodeUtf8

instance Convertible BS.ByteString TL.Text where
{-# INLINE safeConvert #-}
safeConvert = fmap TL.fromStrict . safeConvert

instance Convertible BS.ByteString TLB.Builder where
{-# INLINE safeConvert #-}
safeConvert = fmap TLB.fromText . safeConvert

instance Convertible BS.ByteString BL.ByteString where
{-# INLINE safeConvert #-}
safeConvert = Right . BL.fromStrict

instance Convertible BS.ByteString BB.Builder where
{-# INLINE safeConvert #-}
safeConvert = Right . BB.byteString



instance Convertible BL.ByteString [Word8] where
{-# INLINE safeConvert #-}
safeConvert = Right . BL.unpack

instance Convertible BS.ByteString BL.ByteString where
safeConvert = Right . BL.fromChunks . (:[])
instance Convertible BL.ByteString TS.Text where
{-# INLINE safeConvert #-}
safeConvert = fmap TL.toStrict . safeConvert

instance Convertible BL.ByteString TL.Text where
{-# INLINE safeConvert #-}
safeConvert = Right . TLE.decodeUtf8

instance Convertible BL.ByteString TLB.Builder where
{-# INLINE safeConvert #-}
safeConvert = fmap TLB.fromLazyText . safeConvert

instance Convertible BL.ByteString BS.ByteString where
safeConvert = Right . BS.concat . BL.toChunks
{-# INLINE safeConvert #-}
safeConvert = Right . BL.toStrict

instance Convertible BL.ByteString BB.Builder where
{-# INLINE safeConvert #-}
safeConvert = Right . BB.lazyByteString



instance Convertible [Char] TS.Text where
{-# INLINE safeConvert #-}
safeConvert = Right . TS.pack

instance Convertible [Char] TL.Text where
{-# INLINE safeConvert #-}
safeConvert = Right . TL.pack

instance Convertible [Char] TLB.Builder where
{-# INLINE safeConvert #-}
safeConvert = Right . TLB.fromString



instance Convertible [Word8] BS.ByteString where
{-# INLINE safeConvert #-}
safeConvert = Right . BS.pack

instance Convertible [Word8] BL.ByteString where
{-# INLINE safeConvert #-}
safeConvert = Right . BL.pack

instance Convertible [Word8] BB.Builder where
{-# INLINE safeConvert #-}
safeConvert = Right . foldMap BB.word8



instance Convertible Char TS.Text where
{-# INLINE safeConvert #-}
safeConvert = Right . TS.singleton

instance Convertible Char TL.Text where
{-# INLINE safeConvert #-}
safeConvert = Right . TL.singleton

instance Convertible Char TLB.Builder where
{-# INLINE safeConvert #-}
safeConvert = Right . TLB.singleton



instance Convertible Word8 BS.ByteString where
{-# INLINE safeConvert #-}
safeConvert = Right . BS.singleton

instance Convertible Word8 BL.ByteString where
{-# INLINE safeConvert #-}
safeConvert = Right . BL.singleton

instance Convertible Word8 BB.Builder where
{-# INLINE safeConvert #-}
safeConvert = Right . BB.word8
23 changes: 8 additions & 15 deletions convertible.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -39,23 +39,19 @@ Build-Type: Simple

Cabal-Version: >=1.2

flag splitBase
description: Choose the new smaller, split-up base package.
flag buildtests
description: Build the executable to run unit tests
default: False

library
if flag(splitBase)
Build-Depends: base>=3 && <5,
old-time,
time>=1.1.3,
bytestring,
containers,
old-locale
else
Build-Depends: base<3
Build-Depends: mtl, text >= 0.7
Build-Depends: base>=3 && <5,
old-time,
time>=1.1.3,
bytestring >= 0.10.2,
containers,
old-locale,
mtl,
text >= 0.8

GHC-Options: -O2 -Wall -fno-warn-orphans

Expand All @@ -69,9 +65,6 @@ library
Data.Convertible.Instances.Text,
Data.Convertible.Instances.Time

--Other-Modules: Database.HDBC.Utils
--Extensions: ExistentialQuantification, AllowOverlappingInstances,
-- AllowUndecidableInstances
Extensions: ExistentialQuantification, MultiParamTypeClasses,
UndecidableInstances, FlexibleInstances,
FlexibleContexts, TypeSynonymInstances, CPP
Expand Down

0 comments on commit e742927

Please sign in to comment.