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