module Bio.Utils.Vector 
  ( (!?!)
  ) where


import GHC.Stack             (HasCallStack)
import Data.Vector           (Vector)
import qualified Data.Vector as V ((!?),
                                   length)
import Data.Maybe            (fromMaybe)

infix 9 !?!
(!?!) :: (HasCallStack, Show a) => Vector a -> Int -> a
!?! :: Vector a -> Int -> a
(!?!) Vector a
v Int
i = a -> Maybe a -> a
forall a. a -> Maybe a -> a
fromMaybe ([Char] -> a
forall a. HasCallStack => [Char] -> a
error [Char]
msg) (Maybe a -> a) -> Maybe a -> a
forall a b. (a -> b) -> a -> b
$ Vector a
v Vector a -> Int -> Maybe a
forall a. Vector a -> Int -> Maybe a
V.!? Int
i
  where
    msg :: String
    msg :: [Char]
msg = [Char]
"cobot-io: index " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Int -> [Char]
forall a. Show a => a -> [Char]
show Int
i [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ [Char]
" is out of bounds. Vector length is : " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Int -> [Char]
forall a. Show a => a -> [Char]
show (Vector a -> Int
forall a. Vector a -> Int
V.length Vector a
v)