abstract Bind = { cat S ; fun f1 : S ; f2 : S ; concat : S -> S -> S ; bind : S -> S -> S ; softbind : S -> S -> S ; }