{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE RebindableSyntax #-}
{-# LANGUAGE Safe #-}

module Data.Functor.All.Syntax(
  fail
, fromInteger
, ifThenElse
) where

import qualified Control.Monad as M(Monad(fail))
import qualified Data.Bool as B(Bool(True, False))
import qualified Data.String as S(String)
import qualified Prelude as P(Num, Integer, fromInteger)

fail ::
  M.Monad m =>
  S.String
  -> m a
fail =
  M.fail

fromInteger ::
  P.Num a =>
  P.Integer
  -> a
fromInteger =
  P.fromInteger

ifThenElse ::
  B.Bool
  -> a
  -> a
  -> a
ifThenElse B.True t _ =
  t
ifThenElse B.False _ f =
  f