module Data.List.Extra where
import Control.DeepSeq (NFData(..))
import Data.Traversable (fmapDefault, foldMapDefault)
#if __GLASGOW_HASKELL__ < 710
import Control.Applicative ((<$>), (<*>))
import Data.Foldable (Foldable(..))
import Data.Traversable (Traversable(..))
#else
import Data.Foldable (toList)
#endif
moreThan :: [a] -> Int -> Bool
moreThan [] n = n < 0
moreThan _ 0 = True
moreThan (_:xs) n = moreThan xs (n1)
data NonEmpty a = a :| [a] deriving (Eq, Ord, Read, Show)
instance Functor NonEmpty where
fmap = fmapDefault
instance Foldable NonEmpty where
foldMap = foldMapDefault
#if __GLASGOW_HASKELL__ >= 710
toList (a :| as) = a : as
#endif
instance Traversable NonEmpty where
traverse f (a:|as) = (:|) <$> f a <*> traverse f as
instance NFData a => NFData (NonEmpty a) where
rnf (x:|xs) = rnf (x, xs)
toList :: NonEmpty a -> [a]
toList (a :| as) = a : as
unsafeToNonEmpty :: [a] -> NonEmpty a
unsafeToNonEmpty (a:as) = a :| as
unsafeToNonEmpty [] = error "Cannot convert [] to NonEmpty!"