packages feed

mit-3qvpPyAi6mH-4: src/Mit/Seq1.hs

module Mit.Seq1 where

import Data.Coerce
import qualified Data.Foldable
import Data.Sequence (Seq)
import qualified Data.Sequence as Seq
import Prelude

newtype Seq1 a = Seq1
  {unSeq1 :: Seq a}
  deriving newtype (Foldable)

dropEnd :: Int -> Seq1 a -> Seq a
dropEnd =
  let loop n =
        case n of
          0 -> id
          _ -> \case
            Seq.Empty -> Seq.Empty
            ys Seq.:|> _ -> loop (n -1) ys
   in \n (Seq1 xs) -> loop n xs

fromSeq :: Seq a -> Maybe (Seq1 a)
fromSeq = \case
  Seq.Empty -> Nothing
  xs -> Just (Seq1 xs)

length :: forall a. Seq1 a -> Int
length =
  coerce (Seq.length @a)

toList :: forall a. Seq1 a -> [a]
toList =
  coerce (Data.Foldable.toList @Seq @a)

toSeq :: Seq1 a -> Seq a
toSeq =
  coerce