{-# LANGUAGE CPP
,MultiParamTypeClasses
,FlexibleInstances #-}
{-# OPTIONS -fno-warn-orphans #-}
module Data.ListLike.Text.Builder
where
#if !MIN_VERSION_base(4,8,0)
import Control.Applicative
#endif
import Control.DeepSeq (NFData(rnf))
import qualified Data.Text.Lazy.Builder as Builder
import Data.ListLike.Base as LL
import Data.ListLike.FoldableLL as LL
import Data.ListLike.IO
import Data.ListLike.String as LL
import Data.ListLike.Text.TextLazy ()
instance FoldableLL Builder.Builder Char where
foldl f r0 = LL.foldl f r0 . Builder.toLazyText
foldr f r0 = LL.foldr f r0 . Builder.toLazyText
instance ListLike Builder.Builder Char where
singleton = Builder.singleton
uncons b = case LL.uncons (Builder.toLazyText b) of
Nothing -> Nothing
Just (c, s) -> Just (c, Builder.fromLazyText s)
null = LL.null . Builder.toLazyText
instance ListLikeIO Builder.Builder Char where
hGetLine h = Builder.fromLazyText <$> hGetLine h
hGetContents h = Builder.fromLazyText <$> hGetContents h
hGet h n = Builder.fromLazyText <$> hGet h n
hGetNonBlocking h n = Builder.fromLazyText <$> hGetNonBlocking h n
hPutStr h = hPutStr h . Builder.toLazyText
instance StringLike Builder.Builder where
toString = toString . Builder.toLazyText
fromString = Builder.fromLazyText . LL.fromString
instance NFData Builder.Builder where
rnf = rnf . Builder.toLazyText