module Data.Container.List where import Data.Container.Class import Prelude import Control.Lens import qualified GHC.Exts as GHC import qualified Data.Vector as V import qualified Data.Text as Text import Data.Text (Text) import qualified Data.Text.Lazy as LazyText type LazyText = LazyText.Text class FromList l where fromList :: [Item l] -> l default fromList :: (GHC.IsList l, GHC.Item l ~ Item l) => [Item l] -> l fromList = GHC.fromList class ToList l where toList :: l -> [Item l] default toList :: (GHC.IsList l, GHC.Item l ~ Item l) => l -> [Item l] toList = GHC.toList type IsList l = (FromList l, ToList l) asList :: IsList a => Iso' a [Item a] asList = iso toList fromList -- === Instances === type instance Item Text = Char instance ToList Text where toList = Text.unpack instance FromList Text where fromList = Text.pack type instance Item LazyText = Char instance ToList LazyText where toList = LazyText.unpack instance FromList LazyText where fromList = LazyText.pack