{-# 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 = liftIO

for ∷ [a] → (a → b) → [b]
for = flip map

headThrow ∷ MonadThrow m ⇒ Exception e ⇒ e → [a] → m a
headThrow _ (a : _) = return a
headThrow e _ = throwM e

headFail ∷ MonadFail m ⇒ String → [a] → m a
headFail _ (a : _) = return a
headFail e _ = fail e