{-# LANGUAGE NoImplicitPrelude, MultiParamTypeClasses, FlexibleInstances #-}
{-# OPTIONS -fno-warn-orphans #-}
module Data.ListLike.DList () where
import Data.ListLike.Base
import Data.ListLike.FoldableLL
import Data.ListLike.String
import Data.DList (DList(..))
import qualified Data.DList as D
import qualified Data.Foldable as F
import qualified Data.String as S
import Control.Category
import Data.Char (Char)
import GHC.Exts (IsList(..))
instance FoldableLL (DList a) a where
foldl = F.foldl
foldr = D.foldr
foldl1 = F.foldl1
foldr1 = F.foldr1
foldl' = F.foldl'
foldr' = F.foldr'
instance ListLike (DList a) a where
empty = D.empty
singleton = D.singleton
cons = D.cons
snoc = D.snoc
append = D.append
head = D.head
tail = D.tail
rigidMap = D.map
null = null . D.toList
replicate = D.replicate
instance StringLike (DList Char) where
toString = D.toList
lines = map D.fromList . S.lines . D.toList
words = map D.fromList . S.words . D.toList
unlines = D.fromList . S.unlines . map D.toList
unwords = D.fromList . S.unwords . map D.toList