【发布时间】:2012-10-22 13:05:31
【问题描述】:
如果我尝试在 lambda 表达式的模式上加上波浪号,GHC 会给我一个 parse error on input \~,就像我可以对命名函数做的那样
let step = \~(x,s) -> run (f x) s -- Parse Error
let step ~(x, s) = run (f x) s -- Works fine
【问题讨论】:
如果我尝试在 lambda 表达式的模式上加上波浪号,GHC 会给我一个 parse error on input \~,就像我可以对命名函数做的那样
let step = \~(x,s) -> run (f x) s -- Parse Error
let step ~(x, s) = run (f x) s -- Works fine
【问题讨论】:
您必须在 lambda 和波浪号之间添加一个空格
\ ~(x,s) -> run (f x) s
造成混淆的原因是\ 和~ 都是用户定义的运算符的有效字符,因此\~ 被解析为一个,而不是被解析为 lambda 表达式的开头:
-- Defining a custom \~ operator is allowed:
let a \~ b = {- ... -}
【讨论】:
\ 和 ~ 都是符号,可以出现在运算符中,因此 \~ 被作为一个标记来使用。