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