{-# LANGUAGE UnicodeSyntax #-}

module Prelude (for, io, headFail, headThrow, module Relude, module Relude.Extra.Map) where

import Control.Exception.Safe
import Relude hiding (Handle, appendFile, force, readFile, stdout, writeFile)
import Relude.Extra.Map (lookup)

io  MonadIO m  IO a  m a
io :: forall (m :: * -> *) a. MonadIO m => IO a -> m a
io = IO a -> m a
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO

for  [a]  (a  b)  [b]
for :: forall a b. [a] -> (a -> b) -> [b]
for = ((a -> b) -> [a] -> [b]) -> [a] -> (a -> b) -> [b]
forall a b c. (a -> b -> c) -> b -> a -> c
flip (a -> b) -> [a] -> [b]
forall a b. (a -> b) -> [a] -> [b]
map

headThrow  MonadThrow m  Exception e  e  [a]  m a
headThrow :: forall (m :: * -> *) e a.
(MonadThrow m, Exception e) =>
e -> [a] -> m a
headThrow e
_ (a
a : [a]
_) = a -> m a
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return a
a
headThrow e
e [a]
_ = e -> m a
forall (m :: * -> *) e a.
(HasCallStack, MonadThrow m, Exception e) =>
e -> m a
throwM e
e

headFail  MonadFail m  String  [a]  m a
headFail :: forall (m :: * -> *) a. MonadFail m => String -> [a] -> m a
headFail String
_ (a
a : [a]
_) = a -> m a
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return a
a
headFail String
e [a]
_ = String -> m a
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
e