Current section
Files
Jump to
Current section
Files
src/monad_trans.erl
%% The contents of this file are subject to the Mozilla Public License
%% Version 1.1 (the "License"); you may not use this file except in
%% compliance with the License. You may obtain a copy of the License
%% at http://www.mozilla.org/MPL/
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and
%% limitations under the License.
-module(monad_trans).
-compile({parse_transform, do}).
%% Monad primitives
-callback '>>='(monad:monadic(TM, A), fun((A) -> monad:monadic(TM, B)), M) ->
monad:monadic(TM, B)
when
TM :: monad:monad(), M :: monad:monad().
-callback return(A, M) -> monad:monadic(TM, A) when TM :: monad:monad(), M :: monad:monad().
-callback fail(any(), M) -> monad:monadic(TM, _A) when TM :: monad:monad(), M :: monad:monad().
%% Lift a computation form the argument monad to the constructed
%% monad.
-callback lift(monad:monadic(M, A), M) -> monad:monadic(TM, A) when
TM :: monad:monad(), M :: monad:monad().