Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Q
quasar
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jens Nolte
quasar
Commits
6bd73fb0
Commit
6bd73fb0
authored
2 years ago
by
Jens Nolte
Browse files
Options
Downloads
Patches
Plain Diff
Change QuasarIO to newtype; add more instances to QuasarIO and QuasarSTM
parent
a91a3960
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/Quasar/Async.hs
+2
-2
2 additions, 2 deletions
src/Quasar/Async.hs
src/Quasar/MonadQuasar.hs
+32
-5
32 additions, 5 deletions
src/Quasar/MonadQuasar.hs
with
34 additions
and
7 deletions
src/Quasar/Async.hs
+
2
−
2
View file @
6bd73fb0
...
@@ -52,12 +52,12 @@ async_ fn = void $ asyncWithUnmask (\unmask -> unmask fn)
...
@@ -52,12 +52,12 @@ async_ fn = void $ asyncWithUnmask (\unmask -> unmask fn)
asyncWithUnmask
::
(
MonadQuasar
m
,
MonadIO
m
)
=>
((
forall
b
.
QuasarIO
b
->
QuasarIO
b
)
->
QuasarIO
a
)
->
m
(
Async
a
)
asyncWithUnmask
::
(
MonadQuasar
m
,
MonadIO
m
)
=>
((
forall
b
.
QuasarIO
b
->
QuasarIO
b
)
->
QuasarIO
a
)
->
m
(
Async
a
)
asyncWithUnmask
fn
=
do
asyncWithUnmask
fn
=
do
quasar
<-
askQuasar
quasar
<-
askQuasar
asyncWithUnmask'
(
\
unmask
->
run
ReaderT
(
fn
(
liftUnmask
unmask
))
quasar
)
asyncWithUnmask'
(
\
unmask
->
run
QuasarIO
quasar
(
fn
(
liftUnmask
unmask
)))
where
where
liftUnmask
::
(
forall
b
.
IO
b
->
IO
b
)
->
QuasarIO
a
->
QuasarIO
a
liftUnmask
::
(
forall
b
.
IO
b
->
IO
b
)
->
QuasarIO
a
->
QuasarIO
a
liftUnmask
unmask
innerAction
=
do
liftUnmask
unmask
innerAction
=
do
quasar
<-
askQuasar
quasar
<-
askQuasar
liftIO
$
unmask
$
run
ReaderT
innerAction
quasar
liftIO
$
unmask
$
run
QuasarIO
quasar
innerAction
asyncWithUnmask_
::
(
MonadQuasar
m
,
MonadIO
m
)
=>
((
forall
b
.
QuasarIO
b
->
QuasarIO
b
)
->
QuasarIO
()
)
->
m
()
asyncWithUnmask_
::
(
MonadQuasar
m
,
MonadIO
m
)
=>
((
forall
b
.
QuasarIO
b
->
QuasarIO
b
)
->
QuasarIO
()
)
->
m
()
asyncWithUnmask_
fn
=
void
$
asyncWithUnmask
fn
asyncWithUnmask_
fn
=
void
$
asyncWithUnmask
fn
...
...
This diff is collapsed.
Click to expand it.
src/Quasar/MonadQuasar.hs
+
32
−
5
View file @
6bd73fb0
...
@@ -41,9 +41,11 @@ import Control.Monad.Reader
...
@@ -41,9 +41,11 @@ import Control.Monad.Reader
import
GHC.Records
(
HasField
(
..
))
import
GHC.Records
(
HasField
(
..
))
import
Quasar.Async.STMHelper
import
Quasar.Async.STMHelper
import
Quasar.Exceptions
import
Quasar.Exceptions
import
Quasar.Future
import
Quasar.Logger
import
Quasar.Logger
import
Quasar.Prelude
import
Quasar.Prelude
import
Quasar.Resources.Disposer
import
Quasar.Resources.Disposer
import
Control.Monad.Base
(
MonadBase
)
-- Invariant: the resource manager is disposed as soon as an exception is thrown to the channel
-- Invariant: the resource manager is disposed as soon as an exception is thrown to the channel
...
@@ -115,22 +117,47 @@ class (MonadCatch m, MonadFix m) => MonadQuasar m where
...
@@ -115,22 +117,47 @@ class (MonadCatch m, MonadFix m) => MonadQuasar m where
localQuasar
::
Quasar
->
m
a
->
m
a
localQuasar
::
Quasar
->
m
a
->
m
a
type
QuasarT
=
ReaderT
Quasar
type
QuasarT
=
ReaderT
Quasar
type
QuasarIO
=
QuasarT
IO
newtype
QuasarIO
a
=
QuasarIO
(
QuasarT
IO
a
)
deriving
newtype
(
Functor
,
Applicative
,
Monad
,
MonadThrow
,
MonadCatch
,
MonadMask
,
MonadFail
,
MonadFix
,
Alternative
,
MonadPlus
,
MonadBase
IO
,
MonadIO
)
instance
Semigroup
a
=>
Semigroup
(
QuasarIO
a
)
where
fx
<>
fy
=
liftA2
(
<>
)
fx
fy
instance
Monoid
a
=>
Monoid
(
QuasarIO
a
)
where
mempty
=
pure
mempty
instance
MonadAwait
QuasarIO
where
await
awaitable
=
liftIO
(
await
awaitable
)
newtype
QuasarSTM
a
=
QuasarSTM
(
QuasarT
STM
a
)
newtype
QuasarSTM
a
=
QuasarSTM
(
QuasarT
STM
a
)
deriving
newtype
(
Functor
,
Applicative
,
Monad
,
MonadThrow
,
MonadCatch
,
MonadFix
,
Alternative
,
MonadSTM
)
deriving
newtype
(
Functor
,
Applicative
,
Monad
,
MonadThrow
,
MonadCatch
,
MonadFix
,
Alternative
,
MonadPlus
,
MonadSTM
)
instance
Semigroup
a
=>
Semigroup
(
QuasarSTM
a
)
where
fx
<>
fy
=
liftA2
(
<>
)
fx
fy
instance
Monoid
a
=>
Monoid
(
QuasarSTM
a
)
where
mempty
=
pure
mempty
instance
MonadFail
QuasarSTM
where
fail
msg
=
throwM
(
userError
msg
)
instance
MonadQuasar
QuasarIO
where
askQuasar
=
QuasarIO
ask
localQuasar
quasar
(
QuasarIO
fn
)
=
QuasarIO
(
local
(
const
quasar
)
fn
)
instance
(
MonadIO
m
,
MonadMask
m
,
MonadFix
m
)
=>
MonadQuasar
(
QuasarT
m
)
where
instance
(
MonadIO
m
,
MonadMask
m
,
MonadFix
m
)
=>
MonadQuasar
(
QuasarT
m
)
where
askQuasar
=
ask
askQuasar
=
ask
localQuasar
quasar
=
local
(
const
quasar
)
localQuasar
quasar
=
local
(
const
quasar
)
{-# SPECIALIZE instance MonadQuasar QuasarIO #-}
{-# SPECIALIZE instance MonadQuasar
(
Quasar
T
IO
)
#-}
instance
(
MonadIO
m
,
MonadMask
m
,
MonadFix
m
)
=>
MonadLog
(
QuasarT
m
)
where
instance
(
MonadIO
m
,
MonadMask
m
,
MonadFix
m
)
=>
MonadLog
(
QuasarT
m
)
where
logMessage
msg
=
do
logMessage
msg
=
do
logger
<-
askLogger
logger
<-
askLogger
liftIO
$
logger
msg
liftIO
$
logger
msg
{-# SPECIALIZE instance MonadLog QuasarIO #-}
{-# SPECIALIZE instance MonadLog
(
Quasar
T
IO
)
#-}
instance
MonadQuasar
QuasarSTM
where
instance
MonadQuasar
QuasarSTM
where
...
@@ -176,7 +203,7 @@ liftQuasarSTM fn = do
...
@@ -176,7 +203,7 @@ liftQuasarSTM fn = do
{-# INLINABLE [1] liftQuasarSTM #-}
{-# INLINABLE [1] liftQuasarSTM #-}
runQuasarIO
::
MonadIO
m
=>
Quasar
->
QuasarIO
a
->
m
a
runQuasarIO
::
MonadIO
m
=>
Quasar
->
QuasarIO
a
->
m
a
runQuasarIO
quasar
fn
=
liftIO
$
runReaderT
fn
quasar
runQuasarIO
quasar
(
QuasarIO
fn
)
=
liftIO
$
runReaderT
fn
quasar
{-# SPECIALIZE runQuasarIO :: Quasar -> QuasarIO a -> IO a #-}
{-# SPECIALIZE runQuasarIO :: Quasar -> QuasarIO a -> IO a #-}
{-# INLINABLE runQuasarIO #-}
{-# INLINABLE runQuasarIO #-}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment