порядок объявления в let-привязках, Haskell vs OCaml

В Haskell порядок объявления в конструкциях let / where не имеет значения, например:

f x = let g1 x y = if x>y then show x else g2 y x
          g2 p q = g1 q p
      in ...

где g2 используется в g1 перед его объявлением. Но в Ocaml это не так:

# let a = b in
  let b = 5 in
  a;;
Warning 26: unused variable b.
Error: Unbound value b

Есть ли причина, по которой OCaml не ведет себя как Haskell? В отсутствие прямого объявления эта функция кажется мне полезной.

Это из-за строгой оценки в OCaml, но из-за ленивости в Haskell?

6
задан Prateek 6 December 2011 в 10:52
поделиться