1{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, TypeFamilies #-} 2{-# OPTIONS -fno-warn-orphans #-} 3-- | 'Data.ListLike.ListLike' instances for 'Data.FMList.FMList' 4module Data.ListLike.FMList () where 5import Prelude hiding (cycle, map) 6import Data.ListLike.Base 7import Data.ListLike.FoldableLL 8--import Data.ListLike.IO 9import Data.ListLike.String 10import Data.FMList (FMList(..)) 11import qualified Data.FMList as FM 12--import Data.Foldable (Foldable) 13import qualified Data.Foldable as F 14--import Data.Traversable (Traversable) 15--import qualified Data.Traversable as T 16import Data.String (IsString) 17import qualified Data.String as S 18import Control.Monad.Zip (MonadZip) 19import qualified Control.Monad.Zip as Z 20--import Data.Function 21import Data.Char (Char) 22import GHC.Exts (IsList(..)) 23 24instance FoldableLL (FMList a) a where 25 foldl = F.foldl 26 foldr = F.foldr 27 foldl1 = F.foldl1 28 foldr1 = F.foldr1 29 foldl' = F.foldl' 30 foldr' = F.foldr' 31 32instance IsList (FMList a) where 33 type Item (FMList a) = a 34 fromList = FM.fromList 35 toList = FM.toList 36 37instance ListLike (FMList a) a where 38 empty = FM.empty 39 singleton = FM.singleton 40 cons = FM.cons 41 snoc = FM.snoc 42 append = FM.append 43 head = FM.head 44 tail = FM.tail 45 last = FM.last 46 init = FM.init 47 --fromList = FM.fromList 48 --toList = FM.toList 49 null = FM.null 50 genericLength = FM.genericLength 51 length = FM.length 52 reverse = FM.reverse 53 filter = FM.filter 54 take = FM.take 55 takeWhile = FM.takeWhile 56 drop = FM.drop 57 dropWhile = FM.dropWhile 58 59instance InfiniteListLike (FMList a) a where 60 iterate = FM.iterate 61 repeat = FM.repeat 62 cycle a = (a `FM.append` cycle a) `FM.append` a 63 64instance IsString (FMList Char) where 65 fromString = FM.fromList 66 67instance StringLike (FMList Char) where 68 toString = FM.toList 69 lines = map FM.fromList . S.lines . FM.toList 70 words = map FM.fromList . S.words . FM.toList 71 unlines = FM.fromList . S.unlines . map FM.toList 72 unwords = FM.fromList . S.unwords . map FM.toList 73 74instance MonadZip FMList where 75 mzipWith = FM.zipWith 76