В 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?