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   findWithDefault :: Element seq -> Index seq -> seq -> Element seq
   19   findMaybe       :: Index seq -> seq -> Maybe $ Element seq
   20   indexMaybe      :: seq -> Index seq -> Maybe $ Element seq
   21   findSafe        :: MonadSafe m => Index seq -> seq -> m $ Element seq
   22   indexSafe       :: MonadSafe m => seq -> Index seq -> m $ Element seq
   23 
   24 instance IsSequence seq => IndexSafe seq where
   25   findWithDefault e i = fromMaybe e . findMaybe i
   26   findMaybe           = flip indexMaybe
   27   indexMaybe          = index
   28   findSafe            = flip indexSafe
   29   indexSafe         l = liftMaybeOrError "MTIndexSafe.indexSafe:" . index l