【问题标题】:Is it possible to use irrefutable tilde (`~`) patterns in lambda expressions?是否可以在 lambda 表达式中使用无可辩驳的波浪号 (`~`) 模式?
【发布时间】: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

【问题讨论】:

    标签: haskell pattern-matching


    【解决方案1】:

    您必须在 lambda 和波浪号之间添加一个空格

    \ ~(x,s) -> run (f x) s
    

    造成混淆的原因是\~ 都是用户定义的运算符的有效字符,因此\~ 被解析为一个,而不是被解析为 lambda 表达式的开头:

    -- Defining a custom \~ operator is allowed:
    let a \~ b = {- ... -} 
    

    【讨论】:

    • 在浪费了更多时间之后,我想在这个问题上,我在写下这个问题的原始版本时发现了解决方案。我想仍然发布它可能会对某人有所帮助......
    • 不过,您应该添加说明。 \~ 都是符号,可以出现在运算符中,因此 \~ 被作为一个标记来使用。
    猜你喜欢
    • 1970-01-01
    • 2017-04-19
    • 2013-01-18
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多