mirror of
https://github.com/awkward-squad/ki.git
synced 2024-07-14 15:10:22 +03:00
Add ki-unlifted package
This commit is contained in:
parent
3ee6d8c870
commit
352ef1161c
@ -1 +1 @@
|
||||
packages: ki
|
||||
packages: ki, ki-unlifted
|
||||
|
79
ki-unlifted/ki-unlifted.cabal
Normal file
79
ki-unlifted/ki-unlifted.cabal
Normal file
@ -0,0 +1,79 @@
|
||||
cabal-version: 2.2
|
||||
|
||||
author: Mitchell Rosen
|
||||
bug-reports: https://github.com/awkward-squad/ki/issues
|
||||
category: Concurrency
|
||||
copyright: Copyright (C) 2020-2021 Mitchell Rosen, Travis Staton
|
||||
homepage: https://github.com/awkward-squad/ki
|
||||
license: BSD-3-Clause
|
||||
license-file: LICENSE
|
||||
maintainer: Mitchell Rosen <mitchellwrosen@gmail.com>, Travis Staton <hello@travisstaton.com>
|
||||
name: ki-unlifted
|
||||
stability: experimental
|
||||
synopsis: A lightweight structured-concurrency library
|
||||
version: 0.3.0
|
||||
|
||||
description:
|
||||
A lightweight structured-concurrency library.
|
||||
|
||||
extra-source-files:
|
||||
CHANGELOG.md
|
||||
README.md
|
||||
|
||||
source-repository head
|
||||
type: git
|
||||
location: https://github.com/awkward-squad/ki.git
|
||||
|
||||
common component
|
||||
build-depends:
|
||||
base >= 4.12.0.0 && < 4.17,
|
||||
default-extensions:
|
||||
AllowAmbiguousTypes
|
||||
BangPatterns
|
||||
BlockArguments
|
||||
ConstraintKinds
|
||||
DeriveAnyClass
|
||||
DeriveDataTypeable
|
||||
DeriveFunctor
|
||||
DeriveGeneric
|
||||
DerivingStrategies
|
||||
DuplicateRecordFields
|
||||
ExistentialQuantification
|
||||
GeneralizedNewtypeDeriving
|
||||
InstanceSigs
|
||||
LambdaCase
|
||||
NamedFieldPuns
|
||||
NoImplicitPrelude
|
||||
NumericUnderscores
|
||||
PartialTypeSignatures
|
||||
PatternSynonyms
|
||||
RankNTypes
|
||||
RoleAnnotations
|
||||
ScopedTypeVariables
|
||||
TypeApplications
|
||||
ViewPatterns
|
||||
default-language: Haskell2010
|
||||
ghc-options:
|
||||
-Weverything
|
||||
-Wno-all-missed-specialisations
|
||||
-Wno-implicit-prelude
|
||||
-Wno-missed-specialisations
|
||||
-Wno-missing-import-lists
|
||||
-Wno-safe
|
||||
-Wno-unsafe
|
||||
if impl(ghc >= 8.10)
|
||||
ghc-options:
|
||||
-Wno-missing-safe-haskell-mode
|
||||
-Wno-prepositive-qualified-module
|
||||
if impl(ghc >= 9.2)
|
||||
ghc-options:
|
||||
-Wno-missing-kind-signatures
|
||||
|
||||
library
|
||||
import: component
|
||||
build-depends:
|
||||
ki,
|
||||
unliftio-core,
|
||||
exposed-modules:
|
||||
Ki.Unlifted
|
||||
hs-source-dirs: src
|
91
ki-unlifted/src/Ki/Unlifted.hs
Normal file
91
ki-unlifted/src/Ki/Unlifted.hs
Normal file
@ -0,0 +1,91 @@
|
||||
-- | The "Ki" API, generalized to use 'MonadIO' and 'MonadUnliftIO'.
|
||||
module Ki.Unlifted
|
||||
( -- * Core API
|
||||
|
||||
-- ** Scope
|
||||
Ki.Scope,
|
||||
scoped,
|
||||
wait,
|
||||
|
||||
-- ** Thread
|
||||
Ki.Thread,
|
||||
fork,
|
||||
forktry,
|
||||
await,
|
||||
|
||||
-- * Extended API
|
||||
fork_,
|
||||
forkWith,
|
||||
forkWith_,
|
||||
forktryWith,
|
||||
Ki.awaitSTM,
|
||||
Ki.waitSTM,
|
||||
|
||||
-- ** Thread options
|
||||
Ki.ThreadOpts (..),
|
||||
Ki.defaultThreadOpts,
|
||||
Ki.ThreadAffinity (..),
|
||||
|
||||
-- ** Bytes
|
||||
Ki.Bytes,
|
||||
Ki.kilobytes,
|
||||
Ki.megabytes,
|
||||
)
|
||||
where
|
||||
|
||||
import Control.Exception (Exception)
|
||||
import Control.Monad.IO.Class (MonadIO (liftIO))
|
||||
import Control.Monad.IO.Unlift (MonadUnliftIO (withRunInIO))
|
||||
import qualified Ki
|
||||
import Prelude
|
||||
|
||||
-- | See 'Ki.await'.
|
||||
await :: MonadIO m => Ki.Thread a -> m a
|
||||
await thread =
|
||||
liftIO (Ki.await thread)
|
||||
|
||||
-- | See 'Ki.fork'.
|
||||
fork :: MonadUnliftIO m => Ki.Scope -> m a -> m (Ki.Thread a)
|
||||
fork scope action =
|
||||
withRunInIO \unlift -> Ki.fork scope (unlift action)
|
||||
|
||||
-- | See 'Ki.fork_'.
|
||||
fork_ :: MonadUnliftIO m => Ki.Scope -> m () -> m ()
|
||||
fork_ scope action =
|
||||
withRunInIO \unlift -> Ki.fork_ scope (unlift action)
|
||||
|
||||
-- | See 'Ki.forkWith'.
|
||||
forkWith :: MonadUnliftIO m => Ki.Scope -> Ki.ThreadOpts -> m a -> m (Ki.Thread a)
|
||||
forkWith scope opts action =
|
||||
withRunInIO \unlift -> Ki.forkWith scope opts (unlift action)
|
||||
|
||||
-- | See 'Ki.forkWith_'.
|
||||
forkWith_ :: MonadUnliftIO m => Ki.Scope -> Ki.ThreadOpts -> m () -> m ()
|
||||
forkWith_ scope opts action =
|
||||
withRunInIO \unlift -> Ki.forkWith_ scope opts (unlift action)
|
||||
|
||||
-- | See 'Ki.forktry'.
|
||||
forktry :: forall e m a. (Exception e, MonadUnliftIO m) => Ki.Scope -> m a -> m (Ki.Thread (Either e a))
|
||||
forktry scope action =
|
||||
withRunInIO \unlift -> Ki.forktry scope (unlift action)
|
||||
|
||||
-- | See 'Ki.forktryWith'.
|
||||
forktryWith ::
|
||||
forall e m a.
|
||||
(Exception e, MonadUnliftIO m) =>
|
||||
Ki.Scope ->
|
||||
Ki.ThreadOpts ->
|
||||
m a ->
|
||||
m (Ki.Thread (Either e a))
|
||||
forktryWith scope opts action =
|
||||
withRunInIO \unlift -> Ki.forktryWith scope opts (unlift action)
|
||||
|
||||
-- | See 'Ki.scoped'.
|
||||
scoped :: MonadUnliftIO m => (Ki.Scope -> m a) -> m a
|
||||
scoped action =
|
||||
withRunInIO \unlift -> Ki.scoped \scope -> unlift (action scope)
|
||||
|
||||
-- | See 'Ki.wait'.
|
||||
wait :: MonadIO m => Ki.Scope -> m ()
|
||||
wait scope =
|
||||
liftIO (Ki.wait scope)
|
Loading…
Reference in New Issue
Block a user