Почему я не могу использовать параметры функции в нотации записи записи?

Пример разбитого кода:

data Foo = Foo {
    bar :: (Int -> Int)
  }

baz = Foo { bar i = i*3 }

Почему это не возможно?

Ответ 1

Это просто синтаксическое ограничение - я подозреваю, что если бы эта функция была рассмотрена, она была бы отвергнута, потому что есть простые альтернативы. Кроме того, если бы он был поддержан, следующий вопрос состоял бы в том, почему не сопоставление шаблонов с несколькими предложениями, и в целом это просто заставило бы язык больше не для того, чтобы получить гораздо больше.

Вы можете использовать baz = Foo { bar = \x -> x*3 } вместо этого для конкретного случая, который вы указали, или определить вспомогательную функцию.

Ответ 2

Это должно работать:

baz = Foo { bar = (\x -> x*3) }