module Bio.Sequence.Utilities
  ( Range
  , checkRange
  , unsafeEither
  ) where

import           Data.Text (Text)
import qualified Data.Text as T (unpack)

-- | Range of form [a, b).
--
type Range = (Int, Int)

checkRange :: Int -> Range -> Bool
checkRange :: Int -> Range -> Bool
checkRange Int
len (Int
lInd, Int
rInd) = Int
lInd Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
rInd Bool -> Bool -> Bool
&& Int
0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
lInd Bool -> Bool -> Bool
&& Int
rInd Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
len

unsafeEither :: Either Text a -> a
unsafeEither :: Either Text a -> a
unsafeEither = (Text -> a) -> (a -> a) -> Either Text a -> a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either ([Char] -> a
forall a. HasCallStack => [Char] -> a
error ([Char] -> a) -> (Text -> [Char]) -> Text -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> [Char]
T.unpack) a -> a
forall a. a -> a
id