File ‹zippy_monad_util.ML›

(*  Title:      Zippy/zippy_monad_util.ML
    Author:     Kevin Kappelmann
*)
signature ZIPPY_MONAD_UTIL =
sig
  structure Mo : evalsfx_ParaT_nargs "MONAD"
  structure MB : evalsfx_ParaT_nargs "MORPH_BASE"
  sharing type MB.M.t = Mo.t
  structure A : evalsfx_ParaT_nargs "KLEISLI_ARROW"
  sharing type A.K.M.t = Mo.t
  structure SC : evalsfx_ParaT_nargs "SEMI_CATEGORY"
  where type (@{ParaT_args} 'a, 'b) morph = (@{ParaT_args} 'a, 'b) A.morph
  structure C : evalsfx_ParaT_nargs "CATEGORY"
  where type (@{ParaT_args} 'a, 'b) morph = (@{ParaT_args} 'a, 'b) A.morph
  structure AA : evalsfx_ParaT_nargs "KLEISLI_ARROW_APPLY"
  sharing type AA.K.M.t = Mo.t
  structure AC : evalsfx_ParaT_nargs "KLEISLI_ARROW_CHOICE"
  sharing type AC.K.M.t = Mo.t
end

functor Zippy_Monad_Util(M : evalsfx_ParaT_nargs "MONAD_BASE") : ZIPPY_MONAD_UTIL =
struct
structure Mo = evalsfx_ParaT_nargs "Monad"(M)
structure MB = evalsfx_ParaT_nargs "Morph_Base"(Mo)
structure A = evalsfx_ParaT_nargs "Kleisli_Arrow"(M)
structure SC = evalsfx_ParaT_nargs "Semi_Category"(A)
structure C = evalsfx_ParaT_nargs "Category"(A)
structure AA = evalsfx_ParaT_nargs "Kleisli_Arrow_Apply"(M)
structure AC = evalsfx_ParaT_nargs "Kleisli_Arrow_Choice"(M)
end