-- |
-- Module      : Basement.Compat.IsList
-- License     : BSD-style
-- Maintainer  : Vincent Hanquez <vincent@snarc.org>
-- Stability   : experimental
-- Portability : portable
--
-- compat friendly version of IsList
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE CPP #-}
module Basement.Compat.IsList
    ( IsList(..)
    ) where

#if MIN_VERSION_base(4,7,0)

import           GHC.Exts

#else

import qualified Prelude

class IsList l where
  type Item l
  fromList  :: [Item l] -> l
  toList    :: l -> [Item l]

  fromListN :: Prelude.Int -> [Item l] -> l
  fromListN _ = fromList

instance IsList [a] where
    type Item [a] = a
    fromList = Prelude.id
    toList   = Prelude.id

#endif