为什么我不能在记录更新表示法中使用函数参数?

Vek*_*weg 10 haskell

破碎代码示例:

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

baz = Foo { bar i = i*3 }
Run Code Online (Sandbox Code Playgroud)

为什么这不可能?

GS *_*ica 15

这只是一个句法限制 - 我怀疑如果考虑过这个特性,它会被拒绝,因为有简单的替代方案.此外,如果支持,下一个问题将是为什么不与多个子句进行模式匹配,总体而言,它只会使语言更大,而不是所有的收益.

您可以使用baz = Foo { bar = \x -> x*3 }您给出的特定情况,或定义辅助功能.

  • Ganesh是对的,它以简单的名义被考虑和拒绝.除了一些旧的邮件列表之外,Haskell的设计并没有真正的记录. (3认同)
  • 对不起,如果我的回答有点误导,这是我受过教育的猜测,而不是某些历史知识. (2认同)

Sib*_*ibi 3

这应该有效:

baz = Foo { bar = (\x -> x*3) }
Run Code Online (Sandbox Code Playgroud)