+-- Note [Floating out of RHSs]
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- Dump bindings that aren't going to escape from a lambda
+-- This isn't a scoping issue (the binder isn't in scope in the RHS
+-- of a non-rec binding)
+-- Rather, it is to avoid floating the x binding out of
+-- f (let x = e in b)
+-- unnecessarily. But we first test for values or trival rhss,
+-- because (in particular) we don't want to insert new bindings between
+-- the "=" and the "\". E.g.
+-- f = \x -> let <bind> in <body>
+-- We do not want
+-- f = let <bind> in \x -> <body>
+-- (a) The simplifier will immediately float it further out, so we may
+-- as well do so right now; in general, keeping rhss as manifest
+-- values is good
+-- (b) If a float-in pass follows immediately, it might add yet more
+-- bindings just after the '='. And some of them might (correctly)
+-- be strict even though the 'let f' is lazy, because f, being a value,
+-- gets its demand-info zapped by the simplifier.
+--
+-- We use exprIsCheap because that is also what's used by the simplifier
+-- to decide whether to float a let out of a let
+