packages feed

bluefin-internal 0.3.0.0 → 0.3.1.0

raw patch · 4 files changed

+100/−1 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Bluefin.Internal.DslBuilder: MkDslBuilder :: Forall (DslBuilderEffects h) r -> DslBuilder (h :: Effects -> Type) r
+ Bluefin.Internal.DslBuilder: MkForall :: (forall (es :: k). () => f es r) -> Forall (f :: k -> k1 -> Type) (r :: k1)
+ Bluefin.Internal.DslBuilder: [unForall] :: Forall (f :: k -> k1 -> Type) (r :: k1) -> forall (es :: k). () => f es r
+ Bluefin.Internal.DslBuilder: [unMkDslBuilder] :: DslBuilder (h :: Effects -> Type) r -> Forall (DslBuilderEffects h) r
+ Bluefin.Internal.DslBuilder: dslBuilder :: (forall (e :: Effects). () => h e -> Eff e r) -> DslBuilder h r
+ Bluefin.Internal.DslBuilder: instance Bluefin.Internal.Handle h => GHC.Base.Applicative (Bluefin.Internal.DslBuilder.DslBuilder h)
+ Bluefin.Internal.DslBuilder: instance Bluefin.Internal.Handle h => GHC.Base.Functor (Bluefin.Internal.DslBuilder.DslBuilder h)
+ Bluefin.Internal.DslBuilder: instance Bluefin.Internal.Handle h => GHC.Base.Monad (Bluefin.Internal.DslBuilder.DslBuilder h)
+ Bluefin.Internal.DslBuilder: instance forall k (f :: k -> * -> *). (forall (es :: k). GHC.Base.Applicative (f es)) => GHC.Base.Applicative (Bluefin.Internal.DslBuilder.Forall f)
+ Bluefin.Internal.DslBuilder: instance forall k (f :: k -> * -> *). (forall (es :: k). GHC.Base.Functor (f es)) => GHC.Base.Functor (Bluefin.Internal.DslBuilder.Forall f)
+ Bluefin.Internal.DslBuilder: instance forall k (f :: k -> * -> *). (forall (es :: k). GHC.Base.Monad (f es)) => GHC.Base.Monad (Bluefin.Internal.DslBuilder.Forall f)
+ Bluefin.Internal.DslBuilder: mkForall :: forall {k1} {k2} f (r :: k2). (forall (es :: k1). () => f es r) -> Forall f r
+ Bluefin.Internal.DslBuilder: newtype DslBuilder (h :: Effects -> Type) r
+ Bluefin.Internal.DslBuilder: newtype Forall (f :: k -> k1 -> Type) (r :: k1)
+ Bluefin.Internal.DslBuilder: runDslBuilder :: forall h (es :: Effects) r. Handle h => h es -> DslBuilder h r -> Eff es r
+ Bluefin.Internal.DslBuilderEffects: MkDslBuilderEffects :: (forall (e :: Effects). () => h e -> Eff (e :& es) r) -> DslBuilderEffects (h :: Effects -> Type) (es :: Effects) r
+ Bluefin.Internal.DslBuilderEffects: [unMkDslBuilderEffects] :: DslBuilderEffects (h :: Effects -> Type) (es :: Effects) r -> forall (e :: Effects). () => h e -> Eff (e :& es) r
+ Bluefin.Internal.DslBuilderEffects: dslBuilderEffects :: forall h (es :: Effects) r. (forall (e :: Effects). () => h e -> Eff (e :& es) r) -> DslBuilderEffects h es r
+ Bluefin.Internal.DslBuilderEffects: instance (e Bluefin.Internal.:> es) => Bluefin.Internal.OneWayCoercible.OneWayCoercible (Bluefin.Internal.DslBuilderEffects.DslBuilderEffects h e r) (Bluefin.Internal.DslBuilderEffects.DslBuilderEffects h es r)
+ Bluefin.Internal.DslBuilderEffects: instance Bluefin.Internal.Handle h => GHC.Base.Applicative (Bluefin.Internal.DslBuilderEffects.DslBuilderEffects h es)
+ Bluefin.Internal.DslBuilderEffects: instance Bluefin.Internal.Handle h => GHC.Base.Functor (Bluefin.Internal.DslBuilderEffects.DslBuilderEffects h es)
+ Bluefin.Internal.DslBuilderEffects: instance Bluefin.Internal.Handle h => GHC.Base.Monad (Bluefin.Internal.DslBuilderEffects.DslBuilderEffects h es)
+ Bluefin.Internal.DslBuilderEffects: newtype DslBuilderEffects (h :: Effects -> Type) (es :: Effects) r
+ Bluefin.Internal.DslBuilderEffects: runDslBuilderEffects :: forall h (es :: Effects) r. h es -> DslBuilderEffects h es r -> Eff es r
+ Bluefin.Internal.DslBuilderEffects: useImplDslBuilderEffects :: forall (e :: Effects) (es :: Effects) (h :: Effects -> Type) r. e :> es => DslBuilderEffects h e r -> DslBuilderEffects h es r

Files

CHANGELOG.md view
@@ -1,3 +1,7 @@+# 0.3.1.0++* Add `Bluefin.Internal.DslBuilder`+ # 0.3.0.0  * Add `Bluefin.Internal.OneWayCoercible` module and related instances
bluefin-internal.cabal view
@@ -1,6 +1,6 @@ cabal-version:      3.0 name:               bluefin-internal-version:            0.3.0.0+version:            0.3.1.0 license:            MIT license-file:       LICENSE author:             Tom Ellis@@ -83,6 +83,8 @@       monad-control < 1.1     exposed-modules:       Bluefin.Internal,+      Bluefin.Internal.DslBuilder,+      Bluefin.Internal.DslBuilderEffects,       Bluefin.Internal.Examples,       Bluefin.Internal.Exception.Scoped,       Bluefin.Internal.Key,
+ src/Bluefin/Internal/DslBuilder.hs view
@@ -0,0 +1,48 @@+{-# LANGUAGE QuantifiedConstraints #-}++module Bluefin.Internal.DslBuilder where++import Bluefin.Internal+import Bluefin.Internal.DslBuilderEffects+  ( DslBuilderEffects,+    dslBuilderEffects,+    runDslBuilderEffects,+  )++newtype Forall f r = MkForall {unForall :: forall es. f es r}++mkForall :: (forall es. f es r) -> Forall f r+mkForall = MkForall++instance (forall es. Functor (f es)) => Functor (Forall f) where+  fmap f k = MkForall (fmap f (unForall k))++instance (forall es. Applicative (f es)) => Applicative (Forall f) where+  pure x = mkForall (pure x)+  f <*> x = mkForall (unForall f <*> unForall x)++instance (forall es. Monad (f es)) => Monad (Forall f) where+  m >>= f = mkForall $ do+    r <- unForall m+    unForall (f r)++newtype DslBuilder h r+  = MkDslBuilder {unMkDslBuilder :: Forall (DslBuilderEffects h) r}++runDslBuilder :: (Handle h) => h es -> DslBuilder h r -> Eff es r+runDslBuilder h f = runDslBuilderEffects h (unForall (unMkDslBuilder f))++dslBuilder :: (forall e. h e -> Eff e r) -> DslBuilder h r+dslBuilder k = MkDslBuilder (mkForall (dslBuilderEffects (useImpl . k)))++instance (Handle h) => Functor (DslBuilder h) where+  fmap f g = dslBuilder (\h -> fmap f (runDslBuilder h g))++instance (Handle h) => Applicative (DslBuilder h) where+  pure x = dslBuilder (pure (pure x))+  f <*> x = dslBuilder (\h -> runDslBuilder h f <*> runDslBuilder h x)++instance (Handle h) => Monad (DslBuilder h) where+  m >>= f = dslBuilder $ \h -> do+    r <- runDslBuilder h m+    runDslBuilder h (f r)
+ src/Bluefin/Internal/DslBuilderEffects.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE QuantifiedConstraints #-}++module Bluefin.Internal.DslBuilderEffects where++import Bluefin.Internal+import Bluefin.Internal.OneWayCoercible+  ( OneWayCoercible,+    oneWayCoercible,+    oneWayCoercibleImpl,+  )++newtype DslBuilderEffects h es r+  = MkDslBuilderEffects {unMkDslBuilderEffects :: forall e. h e -> Eff (e :& es) r}++useImplDslBuilderEffects :: (e :> es) => DslBuilderEffects h e r -> DslBuilderEffects h es r+useImplDslBuilderEffects (MkDslBuilderEffects f) = MkDslBuilderEffects (useImplUnder . f)++runDslBuilderEffects :: h es -> DslBuilderEffects h es r -> Eff es r+runDslBuilderEffects h f = makeOp (unMkDslBuilderEffects f h)++dslBuilderEffects :: (forall e. h e -> Eff (e :& es) r) -> DslBuilderEffects h es r+dslBuilderEffects = MkDslBuilderEffects++instance+  (e :> es) =>+  OneWayCoercible (DslBuilderEffects h e r) (DslBuilderEffects h es r)+  where+  oneWayCoercibleImpl = oneWayCoercible++instance (Handle h) => Functor (DslBuilderEffects h es) where+  fmap f g =+    dslBuilderEffects $ \h ->+      fmap f (runDslBuilderEffects (mapHandle h) (useImplDslBuilderEffects g))++instance (Handle h) => Applicative (DslBuilderEffects h es) where+  pure x = dslBuilderEffects (pure (pure x))+  f <*> x = dslBuilderEffects $ \h ->+    runDslBuilderEffects (mapHandle h) (useImplDslBuilderEffects f)+      <*> runDslBuilderEffects (mapHandle h) (useImplDslBuilderEffects x)++instance (Handle h) => Monad (DslBuilderEffects h es) where+  m >>= f = dslBuilderEffects $ \h -> do+    r <- runDslBuilderEffects (mapHandle h) (useImplDslBuilderEffects m)+    runDslBuilderEffects (mapHandle h) (useImplDslBuilderEffects (f r))