@@ -1,78 +1,34 @@
1−{-# LANGUAGE OverloadedStrings, Rank2Types #-}
1+{-# LANGUAGE Rank2Types #-}
2module Reporting.Task
2module Reporting.Task
17−import qualified System.Exit as Exit
19−import qualified Reporting.Doc as D
20−import qualified Reporting.Exit as Exit
21−import qualified Reporting.Progress as Progress
28−newtype Task a =
17+newtype Task x a =
31− forall result.
20+ forall result. (a -> IO result) -> (x -> IO result) -> IO result
34− -> (Exit.Exit -> IO result)
39−data Env =
24+run :: Task x a -> IO (Either x a)
41− { _tell :: Progress.Progress -> IO ()
42− , _ask :: D.Doc -> IO Bool
46−run :: Progress.Reporter -> Task a -> IO ()
47−run (Progress.Reporter pTell pAsk pEnd) (Task task) =
25+run (Task task) =
48− task (Env pTell pAsk)
26+ task (return . Right) (return . Left)
59−throw :: Exit.Exit -> Task a
61− Task $ \_ _ err -> err exit
65−-- PROGRESS
29+throw :: x -> Task x a
67−
31+ Task $ \_ err -> err x
68−notify :: Progress.Progress -> Task ()
70− Task $ \(Env pTell _) ok _ -> pTell progress >>= ok
73−ask :: D.Doc -> Task Bool
75− Task $ \(Env _ pAsk) ok _ -> pAsk question >>= ok
@@ -80,71 +36,62 @@ ask question =
82{-# INLINE io #-}
38{-# INLINE io #-}
83−io :: IO a -> Task a
39+io :: IO a -> Task x a
85− Task $ \_ ok _ -> work >>= ok
41+ Task $ \ok _ -> work >>= ok
88−eio :: (x -> Exit.Exit) -> IO (Either x a) -> Task a
44+eio :: (x -> y) -> IO (Either x a) -> Task y a
89eio func work =
45eio func work =
90− Task $ \_ ok err ->
46+ Task $ \ok err ->
91 do result <- work
47 do result <- work
92 case result of
48 case result of
93 Right a -> ok a
49 Right a -> ok a
94− Left e -> err (func e)
50+ Left x -> err (func x)
97−withKey :: (Progress.Key -> IO (Either Exit.Exit a)) -> Task a
99− Task $ \(Env pTell _) ok err ->
100− do result <- callback (Progress.Key pTell)
107-- INSTANCES
54-- INSTANCES
110−instance Functor Task where
57+instance Functor (Task x) where
111 {-# INLINE fmap #-}
58 {-# INLINE fmap #-}
112 fmap func (Task taskA) =
59 fmap func (Task taskA) =
113− Task $ \env ok err ->
60+ Task $ \ok err ->
115 okA arg = ok (func arg)
62 okA arg = ok (func arg)
117− taskA env okA err
64+ taskA okA err
120−instance Applicative Task where
67+instance Applicative (Task x) where
121 {-# INLINE pure #-}
68 {-# INLINE pure #-}
123− Task $ \_ ok _ -> ok a
70+ Task $ \ok _ -> ok a
125 {-# INLINE (<*>) #-}
72 {-# INLINE (<*>) #-}
126 (<*>) (Task taskFunc) (Task taskArg) =
73 (<*>) (Task taskFunc) (Task taskArg) =
127− Task $ \env ok err ->
74+ Task $ \ok err ->
129 okFunc func =
76 okFunc func =
131 okArg arg = ok (func arg)
78 okArg arg = ok (func arg)
133− taskArg env okArg err
80+ taskArg okArg err
135− taskFunc env okFunc err
82+ taskFunc okFunc err
138−instance Monad Task where
85+instance Monad (Task x) where
139 {-# INLINE return #-}
86 {-# INLINE return #-}
140 return = pure
87 return = pure
142 {-# INLINE (>>=) #-}
89 {-# INLINE (>>=) #-}
143 (>>=) (Task taskA) callback =
90 (>>=) (Task taskA) callback =
144− Task $ \env ok err ->
91+ Task $ \ok err ->
147 case callback a of
94 case callback a of
148− Task taskB -> taskB env ok err
95+ Task taskB -> taskB ok err
150− taskA env okA err
97+ taskA okA err