1module Reporting.Result where
3import qualified Control.Applicative as A
4import qualified Control.Monad as M
5import Control.Monad.Except (Except, runExcept)
7import qualified Reporting.Annotation as A
8import qualified Reporting.Region as R
13data Result warning error result =
14 Result [A.Located warning] (RawResult [A.Located error] result)
23ok :: a -> Result w e a
28throw :: R.Region -> e -> Result w e a
30 Result [] (Err [A.A region err])
33throwMany :: [A.Located e] -> Result w e a
35 Result [] (Err errors)
38from :: (e -> e') -> Except [A.Located e] a -> Result w e' a
40 case runExcept except of
45 throwMany (map (A.map f) errors)
48mapError :: (e -> e') -> Result w e a -> Result w e' a
49mapError f (Result warnings rawResult) =
56 Err (map (A.map f) msgs)
59addWarnings :: [A.Located w] -> Result w e a -> Result w e a
60addWarnings newWarnings (Result warnings rawResult) =
61 Result (newWarnings ++ warnings) rawResult
66instance M.Functor (Result w e) where
67 fmap func (Result warnings rawResult) =
70 Result warnings (Ok (func a))
73 Result warnings (Err msgs)
76instance A.Applicative (Result w e) where
80 (<*>) (Result warnings resultFunc) (Result warnings' resultVal) =
81 Result (warnings ++ warnings') $
82 case (resultFunc, resultVal) of
86 (Err msgs, Err msgs') ->
96instance M.Monad (Result w e) where
100 (>>=) (Result warnings rawResult) callback =
103 Result warnings (Err msg)
106 let (Result warnings' rawResult') = callback value
108 Result (warnings ++ warnings') rawResult'
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list