2013-12-10 2 views
3

Я хочу иметь доступ к let-binding в следующем where-clause.Где внутри Let, Haskell Scoping,

Почему этот код не работает? И еще более важно: как мне заставить его работать?

test bar = let baz = bar - 1 in 
foo where 
    foo = baz` 

он говорит: Не в области видимости: baz' Perhaps you meant бара»

+1

Вы действительно хотели написать 'baz'' или это было' baz', что вы хотели? –

ответ

3

Вы можете думать о где как еще один способ, чтобы написать пусть вокруг правых частей, которые принадлежат к одной игре.

В вашем случае это довольно просто, так как есть только одна правая сторона. Следовательно, вы писали:

test bar = let foo = baz in let baz = bar-1 in foo 

Это не сработает. Я рекомендую придерживаться либо где или пусть, наиболее идиоматических будет:

test bar = foo 
    where 
     foo = baz 
     baz = bar -1 

Кроме того, когда вы только определить baz тогда baz' никогда не будет находиться в области видимости.

0

where положение может получить доступ только параметры функции включения и любые привязки верхнего уровня. Вы можете передать baz в качестве параметра foo:

test bar = let baz = bar - 1 in (foo baz) 
    where foo x = x 
Смежные вопросы