packages feed

hydra-0.12.0: src/main/haskell/Hydra/Tools/Monads.hs

-- | Functions and type class implementations for working with Hydra's built-in Flow monad

module Hydra.Tools.Monads where

import Hydra.Compute
import Hydra.Monads hiding (fail, pure)
import qualified Hydra.Mantle as Mantle
import qualified Hydra.Lib.Flows as Flows

import qualified Control.Monad as CM
import qualified System.IO as IO


fromEither :: Show e => (e -> String) -> Either e a -> Flow c a
fromEither printErr x = case x of
  Left e -> Flows.fail $ printErr e
  Right a -> return a

flowToIo :: s -> Flow s a -> IO.IO a
flowToIo cx f = case mv of
    Just v -> return v
    Nothing -> CM.fail $ traceSummary trace
  where
    FlowState mv _ trace = unFlow f cx emptyTrace

hydraEitherToHaskellEither :: Mantle.Either a b -> Either a b
hydraEitherToHaskellEither e = case e of
   Mantle.EitherLeft l -> Left l
   Mantle.EitherRight r -> Right r

fromMaybe :: String -> Maybe a -> Flow s a
fromMaybe message m = case m of
  Nothing -> Flows.fail message
  Just v -> return v