bluefin-0.7.0.1: The Bluefin effect system
Safe HaskellNone
LanguageHaskell2010

Bluefin.Compound

Synopsis

Creating your own effects

Wrap a single effect

Because in Bluefin everything happens at the value level, creating your own effects is equivalent to creating your own data types. We just use the techniques we know and love from Haskell! For example, if I want to make a "counter" effect that allows me to increment a counter then I can wrap a Modify capability in a newtype:

newtype Counter1 e = MkCounter1 (Modify Int e)

incCounter1 :: (e <: es) => Counter1 e -> Eff es ()
incCounter1 (MkCounter1 st) = modify st (+ 1)

runCounter1 ::
  (forall e. Counter1 e -> Eff (e :& es) r) ->
  Eff es Int
runCounter1 k =
  evalModify 0 $ \st -> do
    _ <- k (MkCounter1 st)
    get st

Running the handler tells me the number of times I incremented the counter.

exampleCounter1 :: Int
exampleCounter1 = runPureEff $ runCounter1 $ \c -> do
  incCounter1 c
  incCounter1 c
  incCounter1 c
>>> exampleCounter1
3

Wrap multiple effects, first attempt

If we want to wrap multiple effects then we can use the normal approach we use to wrap multiple values into a single value: define a new data type with multiple fields. There's a caveat to this approach, but before we address the caveat let's see the approach in action. Here we define a new capability, Counter2, that contains a Modify and Throw capability within it. That allows us to increment the counter and throw an exception when we hit a limit.

data Counter2 e1 e2 = MkCounter2 (Modify Int e1) (Throw () e2)

incCounter2 :: (e1 <: es, e2 <: es) => Counter2 e1 e2 -> Eff es ()
incCounter2 (MkCounter2 st ex) = do
  count <- get st
  when (count >= 10) $
    throw ex ()
  put st (count + 1)

runCounter2 ::
  (forall e1 e2. Counter2 e1 e2 -> Eff (e2 :& e1 :& es) r) ->
  Eff es Int
runCounter2 k =
  evalModify 0 $ \st -> do
    _ <- try $ \ex -> do
      k (MkCounter2 st ex)
    get st

We can see that attempting to increment the counter forever bails out when we reach the limit.

exampleCounter2 :: Int
exampleCounter2 = runPureEff $ runCounter2 $ \c ->
  forever $
    incCounter2 c
>>> exampleCounter2
10

The flaw of this approach is that you expose one effect parameter for each capability in the data type. That's rather cumbersome! We can do better.

Wrap multiple effects, a better approach

We can avoid exposing multiple effect parameters and just expose a single one. To make this work we have to define our handler in a slightly different way. Firstly we apply useImplIn to the effectful operation k and secondly we apply mapHandle to each of the capabilities out of which we create our compound capability. Everything else remains the same.

data Counter3 e = MkCounter3 (Modify Int e) (Throw () e)

incCounter3 :: (e <: es) => Counter3 e -> Eff es ()
incCounter3 (MkCounter3 st ex) = do
  count <- get st
  when (count >= 10) $
    throw ex ()
  put st (count + 1)

runCounter3 ::
  (forall e. Counter3 e -> Eff (e :& es) r) ->
  Eff es Int
runCounter3 k =
  evalModify 0 $ \st -> do
    _ <- try $ \ex -> do
      useImplIn k (MkCounter3 (mapHandle st) (mapHandle ex))
    get st

The example works as before:

exampleCounter3 :: Int
exampleCounter3 = runPureEff $ runCounter3 $ \c ->
  forever $
    incCounter3 c
>>> exampleCounter3
10

Wrap a single effect, don't handle it

So far our handlers have handled all the effects that are found within our compound effect. We don't have to do that though: we can leave an effect unhandled to be handled by a different handler at a higher level. This must always be the case for IOE, which can only be handled at the top level by runEff. Let's see what it looks like to wrap IOE and provide an API which allows a subset of IO operations.

newtype Counter3B e = MkCounter3B (IOE e)

incCounter3B :: (e <: es) => Counter3B e -> Eff es ()
incCounter3B (MkCounter3B io) =
  effIO io (putStrLn "You tried to increment the counter")

runCounter3B ::
  (e1 <: es) =>
  IOE e1 ->
  (forall e. Counter3B e -> Eff (e :& es) r) ->
  Eff es r
runCounter3B io k = useImplIn k (MkCounter3B (mapHandle io))
exampleCounter3B :: IO ()
exampleCounter3B = runEff $ \io -> runCounter3B io $ \c -> do
  incCounter3B c
  incCounter3B c
  incCounter3B c

This isn't a terribly useful counter! It doesn't actually increment anything, it just prints a message when we try, but the example does demonstrate how to wrap IOE.

-- ghci> exampleCounter3B
-- You tried to increment the counter
-- You tried to increment the counter
-- You tried to increment the counter

Wrap multiple effects, don't handle them all

We can wrap multiple effects, handle some of them and leave the others to be handled later. Let's extend Counter3 with a Yield effect. Whenever we ask to increment the counter, and it is currently an even number, then we yield a message about that. Additionally, there's a new operation getCounter4 which allows us to yield a message whilst returning the value of the counter.

data Counter4 e
  = MkCounter4 (Modify Int e) (Throw () e) (Yield String e)

incCounter4 :: (e <: es) => Counter4 e -> Eff es ()
incCounter4 (MkCounter4 st ex y) = do
  count <- get st

  when (even count) $
    yield y "Count was even"

  when (count >= 10) $
    throw ex ()

  put st (count + 1)

getCounter4 :: (e <: es) => Counter4 e -> String -> Eff es Int
getCounter4 (MkCounter4 st _ y) msg = do
  yield y msg
  get st

runCounter4 ::
  (e1 <: es) =>
  Yield String e1 ->
  (forall e. Counter4 e -> Eff (e :& es) r) ->
  Eff es Int
runCounter4 y k =
  evalModify 0 $ \st -> do
    _ <- try $ \ex -> do
      useImplIn k (MkCounter4 (mapHandle st) (mapHandle ex) (mapHandle y))
    get st
exampleCounter4 :: ([String], Int)
exampleCounter4 = runPureEff $ yieldToList $ \y -> do
  runCounter4 y $ \c -> do
    incCounter4 c
    incCounter4 c
    n <- getCounter4 c "I'm getting the counter"
    when (n == 2) $
      yield y "n was 2, as expected"
>>> exampleCounter4
(["Count was even","I'm getting the counter","n was 2, as expected"],2)

Dynamic effects

So far we've looked at "concrete" compound effects, that is, new effects implemented in terms of specific other effects. We can also define dynamic effects, whose implementation is left abstract, to be defined in the handler. To do that we create a capability that is a record of functions. To run an effectful operation we call one of the functions from the record. We define the record in the handler. Here incCounter5Impl and getCounter5Impl are exactly the same as incCounter4 and getCounter4 were, they're just defined in the handler. In order to be used polymorphically, the actual effectful functions we call, incCounter5 and getCounter5 are derived from the record fields.

data Counter5 e = MkCounter5
  { incCounter5Impl :: Eff e (),
    getCounter5Impl :: String -> Eff e Int
  }
  deriving (Generic)
  deriving (Handle) via OneWayCoercibleHandle Counter5

instance (e <: es) => OneWayCoercible (Counter5 e) (Counter5 es) where
  oneWayCoercibleImpl = gOneWayCoercible

incCounter5 :: (e <: es) => Counter5 e -> Eff es ()
incCounter5 e = incCounter5Impl (mapHandle e)

getCounter5 :: (e <: es) => Counter5 e -> String -> Eff es Int
getCounter5 e msg = getCounter5Impl (mapHandle e) msg

runCounter5 ::
  (e1 <: es) =>
  Yield String e1 ->
  (forall e. Counter5 e -> Eff (e :& es) r) ->
  Eff es Int
runCounter5 y k =
  evalModify 0 $ \st -> do
    _ <- try $ \ex -> do
      useImplIn
        k
        ( MkCounter5
            { incCounter5Impl = do
                count <- get st

                when (even count) $
                  yield y "Count was even"

                when (count >= 10) $
                  throw ex ()

                put st (count + 1),
              getCounter5Impl = \msg -> do
                yield y msg
                get st
            }
        )
    get st

The result is exactly the same as before

exampleCounter5 :: ([String], Int)
exampleCounter5 = runPureEff $ yieldToList $ \y -> do
  runCounter5 y $ \c -> do
    incCounter5 c
    incCounter5 c
    n <- getCounter5 c "I'm getting the counter"
    when (n == 2) $
      yield y "n was 2, as expected"
>>> exampleCounter5
(["Count was even","I'm getting the counter","n was 2, as expected"],2)

Combining concrete and dynamic effects

We can also freely combine concrete and dynamic effects. In the following example, the incCounter6 effect is left dynamic, and defined in the handler, whilst getCounter6 is implemented in terms of concrete Modify and Yield effects.

data Counter6 e = MkCounter6
  { incCounter6Impl :: Eff e (),
    counter6Modify :: Modify Int e,
    counter6Yield :: Yield String e
  }
  deriving (Generic)
  deriving (Handle) via OneWayCoercibleHandle Counter6

instance (e <: es) => OneWayCoercible (Counter6 e) (Counter6 es) where
  oneWayCoercibleImpl = gOneWayCoercible

incCounter6 :: (e <: es) => Counter6 e -> Eff es ()
incCounter6 e = incCounter6Impl (mapHandle e)

getCounter6 :: (e <: es) => Counter6 e -> String -> Eff es Int
getCounter6 (MkCounter6 _ st y) msg = do
  yield y msg
  get st

runCounter6 ::
  (e1 <: es) =>
  Yield String e1 ->
  (forall e. Counter6 e -> Eff (e :& es) r) ->
  Eff es Int
runCounter6 y k =
  evalModify 0 $ \st -> do
    _ <- try $ \ex -> do
      useImplIn
        k
        ( MkCounter6
            { incCounter6Impl = do
                count <- get st

                when (even count) $
                  yield y "Count was even"

                when (count >= 10) $
                  throw ex ()

                put st (count + 1),
              counter6Modify = mapHandle st,
              counter6Yield = mapHandle y
            }
        )
    get st

Naturally, the result is the same.

exampleCounter6 :: ([String], Int)
exampleCounter6 = runPureEff $ yieldToList $ \y -> do
  runCounter6 y $ \c -> do
    incCounter6 c
    incCounter6 c
    n <- getCounter6 c "I'm getting the counter"
    when (n == 2) $
      yield y "n was 2, as expected"
>>> exampleCounter6
(["Count was even","I'm getting the counter","n was 2, as expected"],2)

Dynamic effects with handles as arguments

We can implement dynamic effects that themselves take capabilities as arguments, by giving all the capability arguments the effect tag e'.

data Counter7 e = MkCounter7
  { incCounter7Impl :: forall e'. Throw () e' -> Eff (e' :& e) (),
    counter7Modify :: Modify Int e,
    counter7Yield :: Yield String e
  }
  deriving (Handle) via OneWayCoercibleHandle Counter7

-- | The "forall" in the type of incCounter7 means that we
-- can't derive the OneWayCoercible instance with
-- gOneWayCoercible so instead we use oneWayCoercibleTrustMe.

instance (e <: es) => OneWayCoercible (Counter7 e) (Counter7 es) where
  oneWayCoercibleImpl = oneWayCoercibleTrustMe $ \c ->
    MkCounter7
      { incCounter7Impl = \ex -> useImplUnder (incCounter7Impl c ex),
        counter7Modify = mapHandle (counter7Modify c),
        counter7Yield = mapHandle (counter7Yield c)
      }

incCounter7 ::
  (e <: es, e1 <: es) => Counter7 e -> Throw () e1 -> Eff es ()
incCounter7 e ex = makeOp (incCounter7Impl (mapHandle e) (mapHandle ex))

getCounter7 :: (e <: es) => Counter7 e -> String -> Eff es Int
getCounter7 (MkCounter7 _ st y) msg = do
  yield y msg
  get st

runCounter7 ::
  (e1 <: es) =>
  Yield String e1 ->
  (forall e. Counter7 e -> Eff (e :& es) r) ->
  Eff es Int
runCounter7 y k =
  evalModify 0 $ \st -> do
    _ <-
      useImplIn
        k
        ( MkCounter7
            { incCounter7Impl = \ex -> do
                count <- get st

                when (even count) $
                  yield y "Count was even"

                when (count >= 10) $
                  throw ex ()

                put st (count + 1),
              counter7Modify = mapHandle st,
              counter7Yield = mapHandle y
            }
        )
    get st

The result is the same as before ...

exampleCounter7A :: ([String], Int)
exampleCounter7A = runPureEff $ yieldToList $ \y -> do
  handle (\() -> pure (-42)) $ \ex ->
    runCounter7 y $ \c -> do
      incCounter7 c ex
      incCounter7 c ex
      n <- getCounter7 c "I'm getting the counter"
      when (n == 2) $
        yield y "n was 2, as expected"

-- > exampleCounter7A
-- (["Count was even","I'm getting the counter","n was 2, as expected"],2)

... unless we run incCounter too many times, in which case it throws an exception.

exampleCounter7B :: ([String], Int)
exampleCounter7B = runPureEff $ yieldToList $ \y -> do
  handle (\() -> pure (-42)) $ \ex ->
    runCounter7 y $ \c -> do
      forever (incCounter7 c ex)

-- > exampleCounter7B
-- (["Count was even","Count was even","Count was even","Count was even","Count was even","Count was even"],-42)

Dynamic effects with effectful operations as arguments

We can also implement dynamic effects that themselves take effectful operations as arguments, by giving the effectful operation the effect tag e'. Here's an example of a dynamic reader effect, and one handler for the effect, which runs it in terms of the existing Reader effect.

data DynamicReader r e = DynamicReader
  { askLRImpl :: Eff e r,
    localLRImpl :: forall e' a. (r -> r) -> Eff e' a -> Eff (e' :& e) a
  }
  deriving (Handle) via OneWayCoercibleHandle (DynamicReader r)

-- | The "forall" in the type of localRImpl means that we
-- can't derive the OneWayCoercible instance with
-- gOneWayCoercible instead we use oneWayCoercibleTrustMe.

instance
  (e <: es) =>
  OneWayCoercible (DynamicReader r e) (DynamicReader r es)
  where
  oneWayCoercibleImpl = oneWayCoercibleTrustMe $ \h ->
    DynamicReader
      { askLRImpl = useImpl (askLRImpl h),
        localLRImpl = \f k -> useImplUnder (localLRImpl h f k)
      }

askLR ::
  (e <: es) =>
  DynamicReader r e ->
  Eff es r
askLR c = askLRImpl (mapHandle c)

localLR ::
  (e <: es) =>
  DynamicReader r e ->
  (r -> r) ->
  Eff es a ->
  Eff es a
localLR c f m = makeOp (localLRImpl (mapHandle c) f m)

runDynamicReader ::
  r ->
  (forall e. DynamicReader r e -> Eff (e :& es) a) ->
  Eff es a
runDynamicReader r k =
  runReader r $ \h -> do
    useImplIn
      k
      DynamicReader
        { askLRImpl = ask h,
          localLRImpl = \f k' -> local h f (useImpl k')
        }

A dynamic file system effect

The effectful library has an example of a dynamic effect for basic file system access. This is what it looks like in Bluefin. We start by defining a record of effectful operations.

data FileSystem es = MkFileSystem
  { readFileImpl :: FilePath -> Eff es String,
    writeFileImpl :: FilePath -> String -> Eff es ()
  }
  deriving (Generic)
  deriving (Handle) via OneWayCoercibleHandle FileSystem

instance (e <: es) => OneWayCoercible (FileSystem e) (FileSystem es) where
  oneWayCoercibleImpl = gOneWayCoercible

readFile :: (e <: es) => FileSystem e -> FilePath -> Eff es String
readFile fs filepath = readFileImpl (mapHandle fs) filepath

writeFile :: (e <: es) => FileSystem e -> FilePath -> String -> Eff es ()
writeFile fs filepath contents =
  writeFileImpl (mapHandle fs) filepath contents

We can make a pure handler that simulates reading and writing to a file system by storing file contents in an association list.

runFileSystemPure ::
  (e1 <: es) =>
  Throw String e1 ->
  [(FilePath, String)] ->
  (forall e2. FileSystem e2 -> Eff (e2 :& es) r) ->
  Eff es r
runFileSystemPure ex fs0 k =
  evalModify fs0 $ \fs ->
    useImplIn
      k
      MkFileSystem
        { readFileImpl = \filepath -> do
            fs' <- get fs
            case lookup filepath fs' of
              Nothing ->
                throw ex ("File not found: " <> filepath)
              Just s -> pure s,
          writeFileImpl = \filepath contents ->
            modify fs ((filepath, contents) :)
        }

Or we can make a handler that actually performs IO operations against a real file system.

runFileSystemIO ::
  forall e1 e2 es r.
  (e1 <: es, e2 <: es) =>
  Throw String e1 ->
  IOE e2 ->
  (forall e. FileSystem e -> Eff (e :& es) r) ->
  Eff es r
runFileSystemIO ex io k =
  useImplIn
    k
    MkFileSystem
      { readFileImpl =
          adapt . Prelude.readFile,
        writeFileImpl =
          \filepath -> adapt . Prelude.writeFile filepath
      }
  where
    adapt :: (e1 <: ess, e2 <: ess) => IO a -> Eff ess a
    adapt m =
      effIO io (Control.Exception.try @IOException m) >>= \case
        Left e -> throw ex (show e)
        Right r -> pure r

We can use the FileSystem effect to define an action which does some file system operations.

action :: (e <: es) => FileSystem e -> Eff es String
action fs = do
  file <- readFile fs "/dev/null"
  when (length file == 0) $ do
    writeFile fs "/tmp/bluefin" "Hello!"
  readFile fs "/tmp/doesn't exist"

and we can run it purely, against a simulated file system

exampleRunFileSystemPure :: Either String String
exampleRunFileSystemPure = runPureEff $ try $ \ex ->
  runFileSystemPure ex [("/dev/null", "")] action
>>> exampleRunFileSystemPure
Left "File not found: /tmp/doesn't exist"

or against the real file system.

exampleRunFileSystemIO :: IO (Either String String)
exampleRunFileSystemIO = runEff $ \io -> try $ \ex ->
  runFileSystemIO ex io action
>>> exampleRunFileSystemIO
Left "/tmp/doesn't exist: openFile: does not exist (No such file or directory)"
$ cat /tmp/bluefin
Hello!

Functions for making compound effects

Handle

class Handle (h :: Effects -> Type) where #

Methods

handleImpl :: HandleD h #

Instances

Instances details
Handle IOE 
Instance details

Defined in Bluefin.Internal

Handle Prim 
Instance details

Defined in Bluefin.Internal.Prim

Handle Handle 
Instance details

Defined in Bluefin.Internal.System.IO

Handle (ConstEffect r) 
Instance details

Defined in Bluefin.Internal

Methods

handleImpl :: HandleD (ConstEffect r) #

Handle (Exception exn) 
Instance details

Defined in Bluefin.Internal

Methods

handleImpl :: HandleD (Exception exn) #

Handle (HandleReader h) 
Instance details

Defined in Bluefin.Internal

Handle (Reader r) 
Instance details

Defined in Bluefin.Internal

Methods

handleImpl :: HandleD (Reader r) #

Handle (State s) 
Instance details

Defined in Bluefin.Internal

Methods

handleImpl :: HandleD (State s) #

Handle (Writer w) 
Instance details

Defined in Bluefin.Internal

Methods

handleImpl :: HandleD (Writer w) #

Handle (Send f) 
Instance details

Defined in Bluefin.Internal.GadtEffect

Methods

handleImpl :: HandleD (Send f) #

Handle (Coroutine a b) 
Instance details

Defined in Bluefin.Internal

Methods

handleImpl :: HandleD (Coroutine a b) #

(forall (e' :: Effects) (es' :: Effects). e' <: es' => OneWayCoercible (OneWayCoercibleHandle h e') (OneWayCoercibleHandle h es')) => Handle (OneWayCoercibleHandle h) 
Instance details

Defined in Bluefin.Internal

(Handle h1, Handle h2) => Handle (h1 :~> h2) 
Instance details

Defined in Bluefin.Internal.CloneableHandle

Methods

handleImpl :: HandleD (h1 :~> h2) #

Handle h => Handle (GenericCloneableHandle h) 
Instance details

Defined in Bluefin.Internal.CloneableHandle

(Handle h1, Handle h2) => Handle (HandleCloner h1 h2) 
Instance details

Defined in Bluefin.Internal.CloneableHandle

Methods

handleImpl :: HandleD (HandleCloner h1 h2) #

Handle h => Handle (Rec1 h) 
Instance details

Defined in Bluefin.Internal

Methods

handleImpl :: HandleD (Rec1 h) #

Handle h => Handle (HandlerUnwrapped r a h) 
Instance details

Defined in Bluefin.Internal.Exception

Methods

handleImpl :: HandleD (HandlerUnwrapped r a h) #

Handle h => Handle (MakeExceptions r a h) 
Instance details

Defined in Bluefin.Internal.Exception

(Handle h1, Handle h2) => Handle (h1 :*: h2) 
Instance details

Defined in Bluefin.Internal

Methods

handleImpl :: HandleD (h1 :*: h2) #

Handle h => Handle (M1 i t h) 
Instance details

Defined in Bluefin.Internal

Methods

handleImpl :: HandleD (M1 i t h) #

data HandleD (h :: Effects -> Type) #

mapHandle :: forall h (e :: Effects) (es :: Effects). (Handle h, e <: es) => h e -> h es #

OneWayCoercible

The documentation for Handle shows how to use OneWayCoercible to define Handle instances.

class OneWayCoercible (a :: k) (b :: k) where #

Methods

oneWayCoercibleImpl :: OneWayCoercibleD a b #

Instances

Instances details
OneWayCoercible () () 
Instance details

Defined in Bluefin.Internal.OneWayCoercible

Methods

oneWayCoercibleImpl :: OneWayCoercibleD () () #

OneWayCoercible (s :: k) (s :: k) 
Instance details

Defined in Bluefin.Internal.OneWayCoercible

Methods

oneWayCoercibleImpl :: OneWayCoercibleD s s #

e <: es => OneWayCoercible (IOE e :: Type) (IOE es :: Type) 
Instance details

Defined in Bluefin.Internal

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (IOE e) (IOE es) #

e <: es => OneWayCoercible (Prim e :: Type) (Prim es :: Type) 
Instance details

Defined in Bluefin.Internal.Prim

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (Prim e) (Prim es) #

e <: es => OneWayCoercible (Handle e :: Type) (Handle es :: Type) 
Instance details

Defined in Bluefin.Internal.System.IO

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (Handle e) (Handle es) #

OneWayCoercible a1 a2 => OneWayCoercible (Maybe a1 :: Type) (Maybe a2 :: Type) 
Instance details

Defined in Bluefin.Internal.OneWayCoercible

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (Maybe a1) (Maybe a2) #

e <: es => OneWayCoercible (ConstEffect r e :: Type) (ConstEffect r es :: Type) 
Instance details

Defined in Bluefin.Internal

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (ConstEffect r e) (ConstEffect r es) #

e <: es => OneWayCoercible (Eff e r :: Type) (Eff es r :: Type) 
Instance details

Defined in Bluefin.Internal

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (Eff e r) (Eff es r) #

e <: es => OneWayCoercible (Exception ex e :: Type) (Exception ex es :: Type) 
Instance details

Defined in Bluefin.Internal

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (Exception ex e) (Exception ex es) #

e <: es => OneWayCoercible (HandleReader h e :: Type) (HandleReader h es :: Type) 
Instance details

Defined in Bluefin.Internal

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (HandleReader h e) (HandleReader h es) #

e <: es => OneWayCoercible (Reader r e :: Type) (Reader r es :: Type) 
Instance details

Defined in Bluefin.Internal

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (Reader r e) (Reader r es) #

e <: es => OneWayCoercible (State s e :: Type) (State s es :: Type) 
Instance details

Defined in Bluefin.Internal

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (State s e) (State s es) #

e <: es => OneWayCoercible (Writer w e :: Type) (Writer w es :: Type) 
Instance details

Defined in Bluefin.Internal

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (Writer w e) (Writer w es) #

e <: es => OneWayCoercible (Send f e :: Type) (Send f es :: Type) 
Instance details

Defined in Bluefin.Internal.GadtEffect

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (Send f e) (Send f es) #

(OneWayCoercible a1 a2, OneWayCoercible b1 b2) => OneWayCoercible (Either a1 b1 :: Type) (Either a2 b2 :: Type) 
Instance details

Defined in Bluefin.Internal.OneWayCoercible

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (Either a1 b1) (Either a2 b2) #

(OneWayCoercible a1 a2, OneWayCoercible b1 b2) => OneWayCoercible ((a1, b1) :: Type) ((a2, b2) :: Type) 
Instance details

Defined in Bluefin.Internal.OneWayCoercible

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (a1, b1) (a2, b2) #

(OneWayCoercible a a', OneWayCoercible b b') => OneWayCoercible (a' -> b :: Type) (a -> b' :: Type) 
Instance details

Defined in Bluefin.Internal.OneWayCoercible

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (a' -> b) (a -> b') #

e <: es => OneWayCoercible (Coroutine a b e :: Type) (Coroutine a b es :: Type) 
Instance details

Defined in Bluefin.Internal

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (Coroutine a b e) (Coroutine a b es) #

OneWayCoercible (h e) (h es) => OneWayCoercible (OneWayCoercibleHandle h e :: Type) (OneWayCoercibleHandle h es :: Type) 
Instance details

Defined in Bluefin.Internal

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (OneWayCoercibleHandle h e) (OneWayCoercibleHandle h es) #

(Handle h1, Handle h2, e <: es) => OneWayCoercible ((h1 :~> h2) e :: Type) ((h1 :~> h2) es :: Type) 
Instance details

Defined in Bluefin.Internal.CloneableHandle

Methods

oneWayCoercibleImpl :: OneWayCoercibleD ((h1 :~> h2) e) ((h1 :~> h2) es) #

(Handle h, e <: es) => OneWayCoercible (GenericCloneableHandle h e :: Type) (GenericCloneableHandle h es :: Type) 
Instance details

Defined in Bluefin.Internal.CloneableHandle

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (GenericCloneableHandle h e) (GenericCloneableHandle h es) #

(Handle h1, Handle h2) => OneWayCoercible (HandleCloner h1 h2 e :: Type) (HandleCloner h1 h2 es :: Type) 
Instance details

Defined in Bluefin.Internal.CloneableHandle

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (HandleCloner h1 h2 e) (HandleCloner h1 h2 es) #

e <: es => OneWayCoercible (DslBuilderEff h e r :: Type) (DslBuilderEff h es r :: Type) 
Instance details

Defined in Bluefin.Internal.DslBuilderEff

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (DslBuilderEff h e r) (DslBuilderEff h es r) #

e <: es => OneWayCoercible (DslBuilderEffects h e r :: Type) (DslBuilderEffects h es r :: Type) 
Instance details

Defined in Bluefin.Internal.DslBuilderEffects

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (DslBuilderEffects h e r) (DslBuilderEffects h es r) #

OneWayCoercible (h e) (h es) => OneWayCoercible (Rec1 h e :: Type) (Rec1 h es :: Type) 
Instance details

Defined in Bluefin.Internal.OneWayCoercible

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (Rec1 h e) (Rec1 h es) #

e <: es => OneWayCoercible (BracketBase bodyRes r a e :: Type) (BracketBase bodyRes r a es :: Type) 
Instance details

Defined in Bluefin.Internal.Exception

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (BracketBase bodyRes r a e) (BracketBase bodyRes r a es) #

(Handle h, e <: es) => OneWayCoercible (HandlerUnwrapped r a h e :: Type) (HandlerUnwrapped r a h es :: Type) 
Instance details

Defined in Bluefin.Internal.Exception

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (HandlerUnwrapped r a h e) (HandlerUnwrapped r a h es) #

(Handle h, e <: es) => OneWayCoercible (MakeExceptions r a h e :: Type) (MakeExceptions r a h es :: Type) 
Instance details

Defined in Bluefin.Internal.Exception

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (MakeExceptions r a h e) (MakeExceptions r a h es) #

(OneWayCoercible (h1 e) (h1 es), OneWayCoercible (h2 e) (h2 es)) => OneWayCoercible ((h1 :*: h2) e :: Type) ((h1 :*: h2) es :: Type) 
Instance details

Defined in Bluefin.Internal.OneWayCoercible

Methods

oneWayCoercibleImpl :: OneWayCoercibleD ((h1 :*: h2) e) ((h1 :*: h2) es) #

OneWayCoercible (h e) (h es) => OneWayCoercible (M1 i t h e :: Type) (M1 i t h es :: Type) 
Instance details

Defined in Bluefin.Internal.OneWayCoercible

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (M1 i t h e) (M1 i t h es) #

e <: es => OneWayCoercible (Eff e :: Type -> Type) (Eff es :: Type -> Type) 
Instance details

Defined in Bluefin.Internal

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (Eff e) (Eff es) #

newtype OneWayCoercibleHandle (a :: k -> Type) (es :: k) #

Constructors

MkOneWayCoercibleHandle (a es) 

Instances

Instances details
OneWayCoercible (h e) (h es) => OneWayCoercible (OneWayCoercibleHandle h e :: Type) (OneWayCoercibleHandle h es :: Type) 
Instance details

Defined in Bluefin.Internal

Methods

oneWayCoercibleImpl :: OneWayCoercibleD (OneWayCoercibleHandle h e) (OneWayCoercibleHandle h es) #

(forall (e' :: Effects) (es' :: Effects). e' <: es' => OneWayCoercible (OneWayCoercibleHandle h e') (OneWayCoercibleHandle h es')) => Handle (OneWayCoercibleHandle h) 
Instance details

Defined in Bluefin.Internal

Generic (OneWayCoercibleHandle a es) 
Instance details

Defined in Bluefin.Internal

Associated Types

type Rep (OneWayCoercibleHandle a es) 
Instance details

Defined in Bluefin.Internal

type Rep (OneWayCoercibleHandle a es) = D1 ('MetaData "OneWayCoercibleHandle" "Bluefin.Internal" "bluefin-internal-0.8.0.0-LTa3D0jwOHcERTQCYk99JC" 'True) (C1 ('MetaCons "MkOneWayCoercibleHandle" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (a es))))
type Rep (OneWayCoercibleHandle a es) 
Instance details

Defined in Bluefin.Internal

type Rep (OneWayCoercibleHandle a es) = D1 ('MetaData "OneWayCoercibleHandle" "Bluefin.Internal" "bluefin-internal-0.8.0.0-LTa3D0jwOHcERTQCYk99JC" 'True) (C1 ('MetaCons "MkOneWayCoercibleHandle" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (a es))))

handleOneWayCoercible :: forall (h :: Effects -> Type). (forall (e :: Effects) (es :: Effects). e <: es => OneWayCoercible (h e) (h es)) => HandleD h #

withHandle :: Handle h => ((forall (e :: Effects) (es :: Effects). e <: es => OneWayCoercible (h e) (h es)) => r) -> r #

gOneWayCoercible :: forall {k} h (e :: k) (es :: k). GOneWayCoercible (Rep (h e)) (Rep (h es)) => OneWayCoercibleD (h e) (h es) #

oneWayCoercibleTrustMe :: forall (e :: Effects) (es :: Effects) h. e <: es => (forall (e' :: Effects) (es' :: Effects). e' <: es' => h e' -> h es') -> OneWayCoercibleD (h e) (h es) #

Bluefin re-exports Generic for convenience.

class Generic a #

Minimal complete definition

from, to

Instances

Instances details
Generic Void 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep Void 
Instance details

Defined in GHC.Internal.Generics

type Rep Void = D1 ('MetaData "Void" "GHC.Internal.Base" "ghc-internal" 'False) (V1 :: Type -> Type)

Methods

from :: Void -> Rep Void x

to :: Rep Void x -> Void

Generic Fingerprint 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep Fingerprint 
Instance details

Defined in GHC.Internal.Generics

type Rep Fingerprint = D1 ('MetaData "Fingerprint" "GHC.Internal.Fingerprint.Type" "ghc-internal" 'False) (C1 ('MetaCons "Fingerprint" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'SourceUnpack 'SourceStrict 'DecidedUnpack) (Rec0 Word64) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'SourceUnpack 'SourceStrict 'DecidedUnpack) (Rec0 Word64)))

Methods

from :: Fingerprint -> Rep Fingerprint x

to :: Rep Fingerprint x -> Fingerprint

Generic Associativity 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep Associativity 
Instance details

Defined in GHC.Internal.Generics

type Rep Associativity = D1 ('MetaData "Associativity" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "LeftAssociative" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "RightAssociative" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NotAssociative" 'PrefixI 'False) (U1 :: Type -> Type)))

Methods

from :: Associativity -> Rep Associativity x

to :: Rep Associativity x -> Associativity

Generic DecidedStrictness 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep DecidedStrictness 
Instance details

Defined in GHC.Internal.Generics

type Rep DecidedStrictness = D1 ('MetaData "DecidedStrictness" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "DecidedLazy" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "DecidedStrict" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "DecidedUnpack" 'PrefixI 'False) (U1 :: Type -> Type)))

Methods

from :: DecidedStrictness -> Rep DecidedStrictness x

to :: Rep DecidedStrictness x -> DecidedStrictness

Generic Fixity 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep Fixity 
Instance details

Defined in GHC.Internal.Generics

type Rep Fixity = D1 ('MetaData "Fixity" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "Prefix" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Infix" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Associativity) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))

Methods

from :: Fixity -> Rep Fixity x

to :: Rep Fixity x -> Fixity

Generic SourceStrictness 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep SourceStrictness 
Instance details

Defined in GHC.Internal.Generics

type Rep SourceStrictness = D1 ('MetaData "SourceStrictness" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "NoSourceStrictness" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "SourceLazy" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "SourceStrict" 'PrefixI 'False) (U1 :: Type -> Type)))

Methods

from :: SourceStrictness -> Rep SourceStrictness x

to :: Rep SourceStrictness x -> SourceStrictness

Generic SourceUnpackedness 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep SourceUnpackedness 
Instance details

Defined in GHC.Internal.Generics

type Rep SourceUnpackedness = D1 ('MetaData "SourceUnpackedness" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "NoSourceUnpackedness" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "SourceNoUnpack" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "SourceUnpack" 'PrefixI 'False) (U1 :: Type -> Type)))

Methods

from :: SourceUnpackedness -> Rep SourceUnpackedness x

to :: Rep SourceUnpackedness x -> SourceUnpackedness

Generic SrcLoc 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep SrcLoc 
Instance details

Defined in GHC.Internal.Generics

type Rep SrcLoc = D1 ('MetaData "SrcLoc" "GHC.Internal.Stack.Types" "ghc-internal" 'False) (C1 ('MetaCons "SrcLoc" 'PrefixI 'True) ((S1 ('MetaSel ('Just "srcLocPackage") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Char]) :*: (S1 ('MetaSel ('Just "srcLocModule") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Char]) :*: S1 ('MetaSel ('Just "srcLocFile") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Char]))) :*: ((S1 ('MetaSel ('Just "srcLocStartLine") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "srcLocStartCol") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)) :*: (S1 ('MetaSel ('Just "srcLocEndLine") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "srcLocEndCol") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))))

Methods

from :: SrcLoc -> Rep SrcLoc x

to :: Rep SrcLoc x -> SrcLoc

Generic GeneralCategory 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep GeneralCategory 
Instance details

Defined in GHC.Internal.Generics

type Rep GeneralCategory = D1 ('MetaData "GeneralCategory" "GHC.Internal.Unicode" "ghc-internal" 'False) ((((C1 ('MetaCons "UppercaseLetter" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "LowercaseLetter" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TitlecaseLetter" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "ModifierLetter" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "OtherLetter" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "NonSpacingMark" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "SpacingCombiningMark" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: (((C1 ('MetaCons "EnclosingMark" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "DecimalNumber" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "LetterNumber" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "OtherNumber" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "ConnectorPunctuation" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "DashPunctuation" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "OpenPunctuation" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ClosePunctuation" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((C1 ('MetaCons "InitialQuote" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "FinalQuote" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "OtherPunctuation" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "MathSymbol" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "CurrencySymbol" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ModifierSymbol" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "OtherSymbol" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: (((C1 ('MetaCons "Space" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "LineSeparator" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ParagraphSeparator" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Control" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "Format" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Surrogate" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "PrivateUse" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NotAssigned" 'PrefixI 'False) (U1 :: Type -> Type))))))

Methods

from :: GeneralCategory -> Rep GeneralCategory x

to :: Rep GeneralCategory x -> GeneralCategory

Generic Ordering 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep Ordering 
Instance details

Defined in GHC.Internal.Generics

type Rep Ordering = D1 ('MetaData "Ordering" "GHC.Types" "ghc-prim" 'False) (C1 ('MetaCons "LT" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "EQ" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "GT" 'PrefixI 'False) (U1 :: Type -> Type)))

Methods

from :: Ordering -> Rep Ordering x

to :: Rep Ordering x -> Ordering

Generic () 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep () 
Instance details

Defined in GHC.Internal.Generics

type Rep () = D1 ('MetaData "Unit" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "()" 'PrefixI 'False) (U1 :: Type -> Type))

Methods

from :: () -> Rep () x

to :: Rep () x -> ()

Generic Bool 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep Bool 
Instance details

Defined in GHC.Internal.Generics

type Rep Bool = D1 ('MetaData "Bool" "GHC.Types" "ghc-prim" 'False) (C1 ('MetaCons "False" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "True" 'PrefixI 'False) (U1 :: Type -> Type))

Methods

from :: Bool -> Rep Bool x

to :: Rep Bool x -> Bool

Generic (NonEmpty a) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (NonEmpty a) 
Instance details

Defined in GHC.Internal.Generics

type Rep (NonEmpty a) = D1 ('MetaData "NonEmpty" "GHC.Internal.Base" "ghc-internal" 'False) (C1 ('MetaCons ":|" ('InfixI 'RightAssociative 5) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [a])))

Methods

from :: NonEmpty a -> Rep (NonEmpty a) x

to :: Rep (NonEmpty a) x -> NonEmpty a

Generic (Down a) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (Down a) 
Instance details

Defined in GHC.Internal.Generics

type Rep (Down a) = D1 ('MetaData "Down" "GHC.Internal.Data.Ord" "ghc-internal" 'True) (C1 ('MetaCons "Down" 'PrefixI 'True) (S1 ('MetaSel ('Just "getDown") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

Methods

from :: Down a -> Rep (Down a) x

to :: Rep (Down a) x -> Down a

Generic (Par1 p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (Par1 p) 
Instance details

Defined in GHC.Internal.Generics

type Rep (Par1 p) = D1 ('MetaData "Par1" "GHC.Internal.Generics" "ghc-internal" 'True) (C1 ('MetaCons "Par1" 'PrefixI 'True) (S1 ('MetaSel ('Just "unPar1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 p)))

Methods

from :: Par1 p -> Rep (Par1 p) x

to :: Rep (Par1 p) x -> Par1 p

Generic (Maybe a) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (Maybe a) 
Instance details

Defined in GHC.Internal.Generics

type Rep (Maybe a) = D1 ('MetaData "Maybe" "GHC.Internal.Maybe" "ghc-internal" 'False) (C1 ('MetaCons "Nothing" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Just" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

Methods

from :: Maybe a -> Rep (Maybe a) x

to :: Rep (Maybe a) x -> Maybe a

Generic (Solo a) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (Solo a) 
Instance details

Defined in GHC.Internal.Generics

type Rep (Solo a) = D1 ('MetaData "Solo" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "MkSolo" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

Methods

from :: Solo a -> Rep (Solo a) x

to :: Rep (Solo a) x -> Solo a

Generic [a] 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep [a] 
Instance details

Defined in GHC.Internal.Generics

type Rep [a] = D1 ('MetaData "List" "GHC.Types" "ghc-prim" 'False) (C1 ('MetaCons "[]" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons ":" ('InfixI 'RightAssociative 5) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [a])))

Methods

from :: [a] -> Rep [a] x

to :: Rep [a] x -> [a]

Generic (Either a b) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (Either a b) 
Instance details

Defined in GHC.Internal.Generics

type Rep (Either a b) = D1 ('MetaData "Either" "GHC.Internal.Data.Either" "ghc-internal" 'False) (C1 ('MetaCons "Left" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)) :+: C1 ('MetaCons "Right" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b)))

Methods

from :: Either a b -> Rep (Either a b) x

to :: Rep (Either a b) x -> Either a b

Generic (Proxy t) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (Proxy t) 
Instance details

Defined in GHC.Internal.Generics

type Rep (Proxy t) = D1 ('MetaData "Proxy" "GHC.Internal.Data.Proxy" "ghc-internal" 'False) (C1 ('MetaCons "Proxy" 'PrefixI 'False) (U1 :: Type -> Type))

Methods

from :: Proxy t -> Rep (Proxy t) x

to :: Rep (Proxy t) x -> Proxy t

Generic (U1 p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (U1 p) 
Instance details

Defined in GHC.Internal.Generics

type Rep (U1 p) = D1 ('MetaData "U1" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "U1" 'PrefixI 'False) (U1 :: Type -> Type))

Methods

from :: U1 p -> Rep (U1 p) x

to :: Rep (U1 p) x -> U1 p

Generic (V1 p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (V1 p) 
Instance details

Defined in GHC.Internal.Generics

type Rep (V1 p) = D1 ('MetaData "V1" "GHC.Internal.Generics" "ghc-internal" 'False) (V1 :: Type -> Type)

Methods

from :: V1 p -> Rep (V1 p) x

to :: Rep (V1 p) x -> V1 p

Generic (a, b) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b) = D1 ('MetaData "Tuple2" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,)" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b)))

Methods

from :: (a, b) -> Rep (a, b) x

to :: Rep (a, b) x -> (a, b)

Generic (OneWayCoercibleHandle a es) 
Instance details

Defined in Bluefin.Internal

Associated Types

type Rep (OneWayCoercibleHandle a es) 
Instance details

Defined in Bluefin.Internal

type Rep (OneWayCoercibleHandle a es) = D1 ('MetaData "OneWayCoercibleHandle" "Bluefin.Internal" "bluefin-internal-0.8.0.0-LTa3D0jwOHcERTQCYk99JC" 'True) (C1 ('MetaCons "MkOneWayCoercibleHandle" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (a es))))
Generic (Rec1 f p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (Rec1 f p) 
Instance details

Defined in GHC.Internal.Generics

type Rep (Rec1 f p) = D1 ('MetaData "Rec1" "GHC.Internal.Generics" "ghc-internal" 'True) (C1 ('MetaCons "Rec1" 'PrefixI 'True) (S1 ('MetaSel ('Just "unRec1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (f p))))

Methods

from :: Rec1 f p -> Rep (Rec1 f p) x

to :: Rep (Rec1 f p) x -> Rec1 f p

Generic (URec (Ptr ()) p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (URec (Ptr ()) p) 
Instance details

Defined in GHC.Internal.Generics

type Rep (URec (Ptr ()) p) = D1 ('MetaData "URec" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "UAddr" 'PrefixI 'True) (S1 ('MetaSel ('Just "uAddr#") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (UAddr :: Type -> Type)))

Methods

from :: URec (Ptr ()) p -> Rep (URec (Ptr ()) p) x

to :: Rep (URec (Ptr ()) p) x -> URec (Ptr ()) p

Generic (URec Char p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (URec Char p) 
Instance details

Defined in GHC.Internal.Generics

type Rep (URec Char p) = D1 ('MetaData "URec" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "UChar" 'PrefixI 'True) (S1 ('MetaSel ('Just "uChar#") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (UChar :: Type -> Type)))

Methods

from :: URec Char p -> Rep (URec Char p) x

to :: Rep (URec Char p) x -> URec Char p

Generic (URec Double p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (URec Double p) 
Instance details

Defined in GHC.Internal.Generics

type Rep (URec Double p) = D1 ('MetaData "URec" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "UDouble" 'PrefixI 'True) (S1 ('MetaSel ('Just "uDouble#") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (UDouble :: Type -> Type)))

Methods

from :: URec Double p -> Rep (URec Double p) x

to :: Rep (URec Double p) x -> URec Double p

Generic (URec Float p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (URec Float p) 
Instance details

Defined in GHC.Internal.Generics

type Rep (URec Float p) = D1 ('MetaData "URec" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "UFloat" 'PrefixI 'True) (S1 ('MetaSel ('Just "uFloat#") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (UFloat :: Type -> Type)))

Methods

from :: URec Float p -> Rep (URec Float p) x

to :: Rep (URec Float p) x -> URec Float p

Generic (URec Int p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (URec Int p) 
Instance details

Defined in GHC.Internal.Generics

type Rep (URec Int p) = D1 ('MetaData "URec" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "UInt" 'PrefixI 'True) (S1 ('MetaSel ('Just "uInt#") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (UInt :: Type -> Type)))

Methods

from :: URec Int p -> Rep (URec Int p) x

to :: Rep (URec Int p) x -> URec Int p

Generic (URec Word p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (URec Word p) 
Instance details

Defined in GHC.Internal.Generics

type Rep (URec Word p) = D1 ('MetaData "URec" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "UWord" 'PrefixI 'True) (S1 ('MetaSel ('Just "uWord#") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (UWord :: Type -> Type)))

Methods

from :: URec Word p -> Rep (URec Word p) x

to :: Rep (URec Word p) x -> URec Word p

Generic (a, b, c) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c) = D1 ('MetaData "Tuple3" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,)" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c))))

Methods

from :: (a, b, c) -> Rep (a, b, c) x

to :: Rep (a, b, c) x -> (a, b, c)

Generic (BracketBase bodyRes r a es) 
Instance details

Defined in Bluefin.Internal.Exception

Associated Types

type Rep (BracketBase bodyRes r a es) 
Instance details

Defined in Bluefin.Internal.Exception

type Rep (BracketBase bodyRes r a es) = D1 ('MetaData "BracketBase" "Bluefin.Internal.Exception" "bluefin-internal-0.8.0.0-LTa3D0jwOHcERTQCYk99JC" 'False) (C1 ('MetaCons "MkBracketBase" 'PrefixI 'True) ((S1 ('MetaSel ('Just "acquire") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Eff es r)) :*: S1 ('MetaSel ('Just "normalRelease") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (r -> bodyRes -> Eff es a))) :*: (S1 ('MetaSel ('Just "unknownExceptionRelease") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (r -> Eff es ())) :*: S1 ('MetaSel ('Just "body") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (r -> Eff es bodyRes)))))

Methods

from :: BracketBase bodyRes r a es -> Rep (BracketBase bodyRes r a es) x

to :: Rep (BracketBase bodyRes r a es) x -> BracketBase bodyRes r a es

Generic ((f :*: g) p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep ((f :*: g) p) 
Instance details

Defined in GHC.Internal.Generics

type Rep ((f :*: g) p) = D1 ('MetaData ":*:" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons ":*:" ('InfixI 'RightAssociative 6) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (f p)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (g p))))

Methods

from :: (f :*: g) p -> Rep ((f :*: g) p) x

to :: Rep ((f :*: g) p) x -> (f :*: g) p

Generic ((f :+: g) p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep ((f :+: g) p) 
Instance details

Defined in GHC.Internal.Generics

type Rep ((f :+: g) p) = D1 ('MetaData ":+:" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons "L1" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (f p))) :+: C1 ('MetaCons "R1" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (g p))))

Methods

from :: (f :+: g) p -> Rep ((f :+: g) p) x

to :: Rep ((f :+: g) p) x -> (f :+: g) p

Generic (K1 i c p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (K1 i c p) 
Instance details

Defined in GHC.Internal.Generics

type Rep (K1 i c p) = D1 ('MetaData "K1" "GHC.Internal.Generics" "ghc-internal" 'True) (C1 ('MetaCons "K1" 'PrefixI 'True) (S1 ('MetaSel ('Just "unK1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c)))

Methods

from :: K1 i c p -> Rep (K1 i c p) x

to :: Rep (K1 i c p) x -> K1 i c p

Generic (a, b, c, d) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c, d) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c, d) = D1 ('MetaData "Tuple4" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,,)" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d))))

Methods

from :: (a, b, c, d) -> Rep (a, b, c, d) x

to :: Rep (a, b, c, d) x -> (a, b, c, d)

Generic ((f :.: g) p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep ((f :.: g) p) 
Instance details

Defined in GHC.Internal.Generics

type Rep ((f :.: g) p) = D1 ('MetaData ":.:" "GHC.Internal.Generics" "ghc-internal" 'True) (C1 ('MetaCons "Comp1" 'PrefixI 'True) (S1 ('MetaSel ('Just "unComp1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (f (g p)))))

Methods

from :: (f :.: g) p -> Rep ((f :.: g) p) x

to :: Rep ((f :.: g) p) x -> (f :.: g) p

Generic (M1 i c f p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (M1 i c f p) 
Instance details

Defined in GHC.Internal.Generics

type Rep (M1 i c f p) = D1 ('MetaData "M1" "GHC.Internal.Generics" "ghc-internal" 'True) (C1 ('MetaCons "M1" 'PrefixI 'True) (S1 ('MetaSel ('Just "unM1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (f p))))

Methods

from :: M1 i c f p -> Rep (M1 i c f p) x

to :: Rep (M1 i c f p) x -> M1 i c f p

Generic (a, b, c, d, e) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c, d, e) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c, d, e) = D1 ('MetaData "Tuple5" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,,,)" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 e)))))

Methods

from :: (a, b, c, d, e) -> Rep (a, b, c, d, e) x

to :: Rep (a, b, c, d, e) x -> (a, b, c, d, e)

Generic (a, b, c, d, e, f) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c, d, e, f) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c, d, e, f) = D1 ('MetaData "Tuple6" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,,,,)" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 e) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 f)))))

Methods

from :: (a, b, c, d, e, f) -> Rep (a, b, c, d, e, f) x

to :: Rep (a, b, c, d, e, f) x -> (a, b, c, d, e, f)

Generic (a, b, c, d, e, f, g) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c, d, e, f, g) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c, d, e, f, g) = D1 ('MetaData "Tuple7" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,,,,,)" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 e)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 f) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 g)))))

Methods

from :: (a, b, c, d, e, f, g) -> Rep (a, b, c, d, e, f, g) x

to :: Rep (a, b, c, d, e, f, g) x -> (a, b, c, d, e, f, g)

Generic (a, b, c, d, e, f, g, h) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c, d, e, f, g, h) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c, d, e, f, g, h) = D1 ('MetaData "Tuple8" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,,,,,,)" 'PrefixI 'False) (((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 e) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 f)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 g) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 h)))))

Methods

from :: (a, b, c, d, e, f, g, h) -> Rep (a, b, c, d, e, f, g, h) x

to :: Rep (a, b, c, d, e, f, g, h) x -> (a, b, c, d, e, f, g, h)

Generic (a, b, c, d, e, f, g, h, i) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c, d, e, f, g, h, i) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c, d, e, f, g, h, i) = D1 ('MetaData "Tuple9" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,,,,,,,)" 'PrefixI 'False) (((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 e) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 f)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 g) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 h) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 i))))))

Methods

from :: (a, b, c, d, e, f, g, h, i) -> Rep (a, b, c, d, e, f, g, h, i) x

to :: Rep (a, b, c, d, e, f, g, h, i) x -> (a, b, c, d, e, f, g, h, i)

Generic (a, b, c, d, e, f, g, h, i, j) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c, d, e, f, g, h, i, j) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c, d, e, f, g, h, i, j) = D1 ('MetaData "Tuple10" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,,,,,,,,)" 'PrefixI 'False) (((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 e)))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 f) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 g)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 h) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 i) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 j))))))

Methods

from :: (a, b, c, d, e, f, g, h, i, j) -> Rep (a, b, c, d, e, f, g, h, i, j) x

to :: Rep (a, b, c, d, e, f, g, h, i, j) x -> (a, b, c, d, e, f, g, h, i, j)

Generic (a, b, c, d, e, f, g, h, i, j, k) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c, d, e, f, g, h, i, j, k) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c, d, e, f, g, h, i, j, k) = D1 ('MetaData "Tuple11" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,,,,,,,,,)" 'PrefixI 'False) (((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 e)))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 f) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 g) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 h))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 i) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 j) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 k))))))

Methods

from :: (a, b, c, d, e, f, g, h, i, j, k) -> Rep (a, b, c, d, e, f, g, h, i, j, k) x

to :: Rep (a, b, c, d, e, f, g, h, i, j, k) x -> (a, b, c, d, e, f, g, h, i, j, k)

Generic (a, b, c, d, e, f, g, h, i, j, k, l) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c, d, e, f, g, h, i, j, k, l) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c, d, e, f, g, h, i, j, k, l) = D1 ('MetaData "Tuple12" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,,,,,,,,,,)" 'PrefixI 'False) (((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 e) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 f)))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 g) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 h) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 i))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 j) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 k) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 l))))))

Methods

from :: (a, b, c, d, e, f, g, h, i, j, k, l) -> Rep (a, b, c, d, e, f, g, h, i, j, k, l) x

to :: Rep (a, b, c, d, e, f, g, h, i, j, k, l) x -> (a, b, c, d, e, f, g, h, i, j, k, l)

Generic (a, b, c, d, e, f, g, h, i, j, k, l, m) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c, d, e, f, g, h, i, j, k, l, m) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c, d, e, f, g, h, i, j, k, l, m) = D1 ('MetaData "Tuple13" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,,,,,,,,,,,)" 'PrefixI 'False) (((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 e) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 f)))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 g) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 h) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 i))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 j) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 k)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 l) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 m))))))

Methods

from :: (a, b, c, d, e, f, g, h, i, j, k, l, m) -> Rep (a, b, c, d, e, f, g, h, i, j, k, l, m) x

to :: Rep (a, b, c, d, e, f, g, h, i, j, k, l, m) x -> (a, b, c, d, e, f, g, h, i, j, k, l, m)

Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c, d, e, f, g, h, i, j, k, l, m, n) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c, d, e, f, g, h, i, j, k, l, m, n) = D1 ('MetaData "Tuple14" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,,,,,,,,,,,,)" 'PrefixI 'False) (((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 e)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 f) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 g)))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 h) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 i) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 j))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 k) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 l)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 m) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 n))))))

Methods

from :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n) -> Rep (a, b, c, d, e, f, g, h, i, j, k, l, m, n) x

to :: Rep (a, b, c, d, e, f, g, h, i, j, k, l, m, n) x -> (a, b, c, d, e, f, g, h, i, j, k, l, m, n)

Generic (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) 
Instance details

Defined in GHC.Internal.Generics

type Rep (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) = D1 ('MetaData "Tuple15" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "(,,,,,,,,,,,,,,)" 'PrefixI 'False) (((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 d) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 e)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 f) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 g)))) :*: (((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 h) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 i)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 j) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 k))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 l) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 m)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 n) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 o))))))

Methods

from :: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) -> Rep (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) x

to :: Rep (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) x -> (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)

Other functions for compound effects

makeOp :: forall (e :: Effects) r. Eff (e :& e) r -> Eff e r #

useImpl :: forall (e :: Effects) (es :: Effects) r. e <: es => Eff e r -> Eff es r #

useImplUnder :: forall (e :: Effects) (es :: Effects) (e1 :: Effects) r. e <: es => Eff (e1 :& e) r -> Eff (e1 :& es) r #

useImplIn :: forall (e :: Effects) (es :: Effects) t r. e <: es => (t -> Eff (es :& e) r) -> t -> Eff es r #

Deprecated

Do not use. Will be removed in a future version.

data Compound (e1 :: Effects -> Type) (e2 :: Effects -> Type) (ss :: Effects) #

runCompound :: forall e1 (s1 :: Effects) e2 (s2 :: Effects) (es :: Effects) r. e1 s1 -> e2 s2 -> (forall (es' :: Effects). Compound e1 e2 es' -> Eff (es' :& es) r) -> Eff (s1 :& (s2 :& es)) r #

withCompound :: forall h1 h2 (e :: Effects) (es :: Effects) r. e <: es => Compound h1 h2 e -> (forall (e1 :: Effects) (e2 :: Effects). (e1 <: es, e2 <: es) => h1 e1 -> h2 e2 -> Eff es r) -> Eff es r #

useImplWithin :: forall (e :: Effects) (es :: Effects) t (e1 :: Effects) r. e <: es => (t -> Eff (e1 :& e) r) -> t -> Eff (e1 :& es) r #