-- | Type-level function to extract underlying server monad
module Mig.Core.Class.Monad (
  MonadOf,
  Send (..),
) where

import Data.Kind
import Mig.Core.Types.Http
import Mig.Core.Types.Route

type family MonadOf a :: (Type -> Type) where
  MonadOf (Send method m a) = m
  MonadOf (Request -> m (Maybe Response)) = m
  MonadOf (f m) = m
  MonadOf (a -> b) = MonadOf b
  MonadOf [a] = MonadOf a