Return

February 27, 2026 · View on GitHub

Return introduces a new data type

data Return a
  = Cont a
  | Return a

and a function

mkReturnable :: ∀ a. ((Return a -> a) -> a) -> a

Using mkReturnable you can create functions that "return" values early in a way that you normally would have to use explicit recursion to accomplish.

For example:

foldl' :: ∀ a b f. Foldable f => (b -> a -> Return b) -> b -> f a -> b
foldl' f init as = mkReturnable \return -> foldl (\b a -> return $ f b a) init as

This is nice because it allows for you to define, for free, folds that can exit early for anything that already has a Foldable instance, instead of having to use recursion to handle each case differently.