A. Proof of Theorem 1 We prove that for every l ′ :: [Int], where fκ (map returnκ l ′ ) = returnκ (unId (fId (map Id l ′ ))) , newtype Id α = Id {unId :: α} instance Monad Id where return a = Id a Id a >>= k = k a To do so, we first show that F : κ ⇔ Id w (1989)

by ACM Press
Venue:that F : κ ⇔ Id with F R = p ; R ; Id is a Monad-action. Indeed, • (returnκ, returnId) ∈ ∀R. R → F R, since for every R and (a, b) ∈ R, (returnκ a, b) ∈ p ; R by p (returnκ a) = a, and • ((>>=κ), (>>=Id)) ∈ ∀R. ∀S. F R → ((R → F S) → F S), since for every