File ‹zippy_monad_util.ML›
signature ZIPPY_MONAD_UTIL =
sig
structure Mo : \<^eval>‹sfx_ParaT_nargs "MONAD"›
structure MB : \<^eval>‹sfx_ParaT_nargs "MORPH_BASE"›
sharing type MB.M.t = Mo.t
structure A : \<^eval>‹sfx_ParaT_nargs "KLEISLI_ARROW"›
sharing type A.K.M.t = Mo.t
structure SC : \<^eval>‹sfx_ParaT_nargs "SEMI_CATEGORY"›
where type (@{ParaT_args} 'a, 'b) morph = (@{ParaT_args} 'a, 'b) A.morph
structure C : \<^eval>‹sfx_ParaT_nargs "CATEGORY"›
where type (@{ParaT_args} 'a, 'b) morph = (@{ParaT_args} 'a, 'b) A.morph
structure AA : \<^eval>‹sfx_ParaT_nargs "KLEISLI_ARROW_APPLY"›
sharing type AA.K.M.t = Mo.t
structure AC : \<^eval>‹sfx_ParaT_nargs "KLEISLI_ARROW_CHOICE"›
sharing type AC.K.M.t = Mo.t
end
functor Zippy_Monad_Util(M : \<^eval>‹sfx_ParaT_nargs "MONAD_BASE"›) : ZIPPY_MONAD_UTIL =
struct
structure Mo = \<^eval>‹sfx_ParaT_nargs "Monad"›(M)
structure MB = \<^eval>‹sfx_ParaT_nargs "Morph_Base"›(Mo)
structure A = \<^eval>‹sfx_ParaT_nargs "Kleisli_Arrow"›(M)
structure SC = \<^eval>‹sfx_ParaT_nargs "Semi_Category"›(A)
structure C = \<^eval>‹sfx_ParaT_nargs "Category"›(A)
structure AA = \<^eval>‹sfx_ParaT_nargs "Kleisli_Arrow_Apply"›(M)
structure AC = \<^eval>‹sfx_ParaT_nargs "Kleisli_Arrow_Choice"›(M)
end