In the language specification, the translation rule of do! e;
is defined as follows:
T(do! e;, V, C, q) = T(let! () = src(e) in b.Return(), V, C, q)
And the signature of Return
is usually 'a -> M<'a>
, so the type of do! e;
results M<unit>
.