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