{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE LambdaCase #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs #-} module Data.Sequence.ToolsYj ( cons, snoc, uncons, unsnoc, splitAt' ) where import Data.Sequence qualified as Seq cons :: a -> Seq.Seq a -> Seq.Seq a cons :: forall a. a -> Seq a -> Seq a cons = a -> Seq a -> Seq a forall a. a -> Seq a -> Seq a (Seq.:<|) snoc :: Seq.Seq a -> a -> Seq.Seq a snoc :: forall a. Seq a -> a -> Seq a snoc = Seq a -> a -> Seq a forall a. Seq a -> a -> Seq a (Seq.:|>) uncons :: Seq.Seq a -> Maybe (a, Seq.Seq a) uncons :: forall a. Seq a -> Maybe (a, Seq a) uncons = \case Seq a Seq.Empty -> Maybe (a, Seq a) forall a. Maybe a Nothing; a x Seq.:<| Seq a s -> (a, Seq a) -> Maybe (a, Seq a) forall a. a -> Maybe a Just (a x, Seq a s) unsnoc :: Seq.Seq a -> Maybe (Seq.Seq a, a) unsnoc :: forall a. Seq a -> Maybe (Seq a, a) unsnoc = \case Seq a Seq.Empty -> Maybe (Seq a, a) forall a. Maybe a Nothing; Seq a s Seq.:|> a x -> (Seq a, a) -> Maybe (Seq a, a) forall a. a -> Maybe a Just (Seq a s, a x) splitAt' :: Int -> Seq.Seq a -> Maybe (Seq.Seq a, Seq.Seq a) splitAt' :: forall a. Int -> Seq a -> Maybe (Seq a, Seq a) splitAt' Int n Seq a s | Seq a -> Int forall a. Seq a -> Int Seq.length Seq a s Int -> Int -> Bool forall a. Ord a => a -> a -> Bool < Int n = Maybe (Seq a, Seq a) forall a. Maybe a Nothing | Bool otherwise = (Seq a, Seq a) -> Maybe (Seq a, Seq a) forall a. a -> Maybe a Just ((Seq a, Seq a) -> Maybe (Seq a, Seq a)) -> (Seq a, Seq a) -> Maybe (Seq a, Seq a) forall a b. (a -> b) -> a -> b $ Int -> Seq a -> (Seq a, Seq a) forall a. Int -> Seq a -> (Seq a, Seq a) Seq.splitAt Int n Seq a s