never executed always true always false
    1 {-# LANGUAGE UndecidableInstances #-}
    2 module HelVM.HelIO.Containers.MTIndexSafe where
    3 
    4 import           HelVM.HelIO.Control.Safe
    5 
    6 import           Control.Type.Operator
    7 import           Data.MonoTraversable
    8 import           Data.Sequences
    9 
   10 import           Prelude                  hiding (break, divMod, drop, fromList, length, splitAt, swap, uncons)
   11 
   12 -- | Index
   13 naturalIndexSafe :: (MonadSafe m , IndexSafe seq , Num $ Index seq) => seq -> Natural -> m $ Element seq
   14 naturalIndexSafe l = indexSafe l . fromIntegral
   15 
   16 -- | Type Class
   17 class IndexSafe seq where
   18   indexSafe :: MonadSafe m => seq -> Index seq -> m $ Element seq
   19   indexSafe l = liftMaybeOrError "MTIndexSafe.indexSafe:" . indexMaybe l
   20 
   21   indexMaybe :: seq -> Index seq -> Maybe $ Element seq
   22   indexMaybe l = rightToMaybe <$> indexSafe l
   23 
   24   atSafe :: MonadSafe m => Index seq -> seq -> m $ Element seq
   25   atSafe = flip indexSafe
   26 
   27   atMaybe :: Index seq -> seq -> Maybe $ Element seq
   28   atMaybe = flip indexMaybe
   29 
   30   atWithDefault :: Element seq -> Index seq -> seq -> Element seq
   31   atWithDefault e i = fromMaybe e . atMaybe i
   32 
   33   findSafe :: MonadSafe m => Index seq -> seq -> m $ Element seq
   34   findSafe = atSafe
   35 
   36   findMaybe :: Index seq -> seq -> Maybe $ Element seq
   37   findMaybe = atMaybe
   38 
   39   findWithDefault :: Element seq -> Index seq -> seq -> Element seq
   40   findWithDefault = atWithDefault
   41 
   42 {-# DEPRECATED findSafe "Use `atSafe`" #-}
   43 {-# DEPRECATED findMaybe "Use `atMaybe`" #-}
   44 {-# DEPRECATED findWithDefault "Use `atWithDefault`" #-}
   45 
   46 instance IsSequence seq => IndexSafe seq where
   47   indexMaybe = index