module Data.Sequence.Extended
    ( module Data.Sequence
    , cons
    , safeIndex
    ) where

import Data.Sequence

cons :: a -> Seq a -> Seq a
cons :: forall a. a -> Seq a -> Seq a
cons a
x Seq a
xs = forall a. a -> Seq a
singleton a
x forall a. Semigroup a => a -> a -> a
<> Seq a
xs

safeIndex :: Seq a -> Int -> Maybe a
safeIndex :: forall a. Seq a -> Int -> Maybe a
safeIndex Seq a
s Int
n
    | Int
n forall a. Ord a => a -> a -> Bool
< Int
0                       = forall a. Maybe a
Nothing
    | Int
n forall a. Ord a => a -> a -> Bool
>= forall a. Seq a -> Int
Data.Sequence.length Seq a
s = forall a. Maybe a
Nothing
    | Bool
otherwise                   = forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ forall a. Seq a -> Int -> a
index Seq a
s Int
n