CMonad.hascasl.output revision bf089e1d4db3bf389ac1a352f4242e82c8f2b3c2
class Functor < Type -> Type
class Monad < Functor
type List : Monad
var a : Type; b : Type
var m : Monad
op fail : m a
op return : a -> m a
var f : Functor
op fmap : (a -> b) -> f a -> f b
op empty : List a
type Set : Functor
op emptySet : Set a
. ((fun __=__[Set _var_10_v10]
: forall a : Type . a_v-1 * a_v-1 ->? Unit) :
Set _var_10_v10 * Set _var_10_v10 ->? Unit)
((op fail[Set; _var_10_v10]
: forall m : Monad; a : Type . m_v-1 a_v-2) :
Set _var_10_v10,
(op emptySet[_var_10_v10] : forall a : Type . Set a_v-1) :
Set _var_10_v10) :
Unit
. ((fun __=__[List _var_20_v20]
: forall a : Type . a_v-1 * a_v-1 ->? Unit) :
List _var_20_v20 * List _var_20_v20 ->? Unit)
((op fail[List; _var_20_v20]
: forall m : Monad; a : Type . m_v-1 a_v-2) :
List _var_20_v20,
(op empty[_var_20_v20] : forall a : Type . List a_v-1) :
List _var_20_v20) :
Unit
op map : (a -> b) -> List a -> List b
op __bind__ : m a * (a -> m b) -> m b
var g : a -> b
var x : m a
. ((fun __=__[List a -> List b]
: forall a : Type . a_v-1 * a_v-1 ->? Unit) :
(List a -> List b) * (List a -> List b) ->? Unit)
(((op fmap[a; b; List]
: forall a : Type; b : Type; f : Functor .
(a_v-1 -> b_v-2) -> f_v-3 a_v-1 -> f_v-3 b_v-2) :
(a -> b) -> List a -> List b)
(var g : a -> b) :
List a -> List b,
((op map[a; b]
: forall a : Type; b : Type .
(a_v-1 -> b_v-2) -> List a_v-1 -> List b_v-2) :
(a -> b) -> List a -> List b)
(var g : a -> b) :
List a -> List b) :
Unit
. ((fun __=__[m b] : forall a : Type . a_v-1 * a_v-1 ->? Unit) :
m b * m b ->? Unit)
((((op fmap[a; b; m]
: forall a : Type; b : Type; f : Functor .
(a_v-1 -> b_v-2) -> f_v-3 a_v-1 -> f_v-3 b_v-2) :
(a -> b) -> m a -> m b)
(var g : a -> b) :
m a -> m b)
(var x : m a) :
m b,
((op __bind__[m; a; b]
: forall m : Monad; a : Type; b : Type .
m_v-1 a_v-2 * (a_v-2 -> m_v-1 b_v-3) -> m_v-1 b_v-3) :
m a * (a -> m b) -> m b)
(var x : m a,
(\ (var y : a)
.! ((op return[b; m]
: forall a : Type; m : Monad . a_v-1 -> m_v-2 a_v-1) :
b -> m b)
((var g : a -> b)(var y : a) : b) :
m b) :
a -> m b) :
m b) :
Unit
%% Classes ---------------------------------------------------------------
Functor < Type -> Type
Monad < Functor
%% Type Constructors -----------------------------------------------------
List : Monad
Logical : Type := Unit ->? Unit
Pred : Type -> Type := \ a : Type . a_v-1 ->? Unit
Set : Functor
Unit : Type
__*__ : +Type -> +Type -> Type
__-->__ : -Type -> +Type -> Type < (__-->?__, __->__)
__-->?__ : -Type -> +Type -> Type < __->?__
__->__ : -Type -> +Type -> Type < __->?__
__->?__ : -Type -> +Type -> Type
a : Type %(var_1)%
b : Type %(var_2)%
f : Functor %(var_4)%
m : Monad %(var_3)%
%% Assumptions -----------------------------------------------------------
__/\__ : ? Unit * ? Unit ->? Unit %(fun)%
__<=>__ : ? Unit * ? Unit ->? Unit %(fun)%
__=__ : forall a : Type . a_v-1 * a_v-1 ->? Unit %(fun)%
__=>__ : ? Unit * ? Unit ->? Unit %(fun)%
__=e=__ : forall a : Type . a_v-1 * a_v-1 ->? Unit %(fun)%
__\/__ : ? Unit * ? Unit ->? Unit %(fun)%
__bind__
: forall m : Monad; a : Type; b : Type .
m_v-1 a_v-2 * (a_v-2 -> m_v-1 b_v-3) -> m_v-1 b_v-3
%(op)%
__if__ : ? Unit * ? Unit ->? Unit %(fun)%
__when__else__
: forall a : Type . a_v-1 * ? Unit * a_v-1 ->? a_v-1 %(fun)%
bottom : forall a : Type . a_v-1 %(fun)%
def__ : forall a : Type . a_v-1 ->? Unit %(fun)%
empty : forall a : Type . List a_v-1 %(op)%
emptySet : forall a : Type . Set a_v-1 %(op)%
fail : forall m : Monad; a : Type . m_v-1 a_v-2 %(op)%
false : Unit %(fun)%
fmap
: forall a : Type; b : Type; f : Functor .
(a_v-1 -> b_v-2) -> f_v-3 a_v-1 -> f_v-3 b_v-2
%(op)%
g : a -> b %(var)%
map
: forall a : Type; b : Type .
(a_v-1 -> b_v-2) -> List a_v-1 -> List b_v-2
%(op)%
not__ : ? Unit ->? Unit %(fun)%
return : forall a : Type; m : Monad . a_v-1 -> m_v-2 a_v-1 %(op)%
true : Unit %(fun)%
x : m a %(var)%
�__ : ? Unit ->? Unit %(fun)%
%% Sentences -------------------------------------------------------------
((fun __=__[Set _var_10_v10]
: forall a : Type . a_v-1 * a_v-1 ->? Unit) :
Set _var_10_v10 * Set _var_10_v10 ->? Unit)
((op fail[Set; _var_10_v10]
: forall m : Monad; a : Type . m_v-1 a_v-2) :
Set _var_10_v10,
(op emptySet[_var_10_v10] : forall a : Type . Set a_v-1) :
Set _var_10_v10) :
Unit
((fun __=__[List _var_20_v20]
: forall a : Type . a_v-1 * a_v-1 ->? Unit) :
List _var_20_v20 * List _var_20_v20 ->? Unit)
((op fail[List; _var_20_v20]
: forall m : Monad; a : Type . m_v-1 a_v-2) :
List _var_20_v20,
(op empty[_var_20_v20] : forall a : Type . List a_v-1) :
List _var_20_v20) :
Unit
((fun __=__[List a -> List b]
: forall a : Type . a_v-1 * a_v-1 ->? Unit) :
(List a -> List b) * (List a -> List b) ->? Unit)
(((op fmap[a; b; List]
: forall a : Type; b : Type; f : Functor .
(a_v-1 -> b_v-2) -> f_v-3 a_v-1 -> f_v-3 b_v-2) :
(a -> b) -> List a -> List b)
(var g : a -> b) :
List a -> List b,
((op map[a; b]
: forall a : Type; b : Type .
(a_v-1 -> b_v-2) -> List a_v-1 -> List b_v-2) :
(a -> b) -> List a -> List b)
(var g : a -> b) :
List a -> List b) :
Unit
((fun __=__[m b] : forall a : Type . a_v-1 * a_v-1 ->? Unit) :
m b * m b ->? Unit)
((((op fmap[a; b; m]
: forall a : Type; b : Type; f : Functor .
(a_v-1 -> b_v-2) -> f_v-3 a_v-1 -> f_v-3 b_v-2) :
(a -> b) -> m a -> m b)
(var g : a -> b) :
m a -> m b)
(var x : m a) :
m b,
((op __bind__[m; a; b]
: forall m : Monad; a : Type; b : Type .
m_v-1 a_v-2 * (a_v-2 -> m_v-1 b_v-3) -> m_v-1 b_v-3) :
m a * (a -> m b) -> m b)
(var x : m a,
(\ (var y : a)
.! ((op return[b; m]
: forall a : Type; m : Monad . a_v-1 -> m_v-2 a_v-1) :
b -> m b)
((var g : a -> b)(var y : a) : b) :
m b) :
a -> m b) :
m b) :
Unit
%% Diagnostics -----------------------------------------------------------
*** Hint 7.5, is type variable 'a'
*** Hint 7.8, is type variable 'b'
*** Hint 9.5, is type variable 'm'
*** Hint 15.5, is type variable 'f'
*** Hint,
expected: Monad
found: Functor
*** Error, in term'((fun __=__[Set _var_10_v10]
: forall a : Type . a_v-1 * a_v-1 ->? Unit) :
Set _var_10_v10 * Set _var_10_v10 ->? Unit)
((op fail[Set; _var_10_v10]
: forall m : Monad; a : Type . m_v-1 a_v-2) :
Set _var_10_v10,
(op emptySet[_var_10_v10] : forall a : Type . Set a_v-1) :
Set _var_10_v10) :
Unit' of type 'Unit'
unresolved constraints '{ Set : Monad }'