【发布时间】:2019-04-10 23:41:40
【问题描述】:
GHC 接受这个代码,但它应该是非法的语法(?)你猜猜发生了什么?
module Tilde where
~ x = x + 2 -- huh?
~ x +++ y = y * 3 -- this makes sense
(+++) 等式很有意义:它声明一个运算符,使用中缀语法,并在第一个参数上使用无可辩驳的模式匹配。
第一个“方程式”一开始看起来是一样的。但是没有运营商。如果我问
λ> :i ~
===> <interactive>:1:1: error: parse error on input `~'
λ> :i (~)
===> class (a ~ b) => (~) (a :: k) (b :: k)
-- Defined in `Data.Type.Equality'
instance [incoherent] forall k (a :: k) (b :: k). (a ~ b) => a ~ b
-- Defined in `Data.Type.Equality'
这是一个令人困惑的发现,但与它无关(?)我无法定义自己的类或运算符(~) -- Illegal binding of built-in syntax,不足为奇。
哦:
λ> :i x
===> x :: Integer -- GHCi defaulting, presumably
并试图永远运行x 循环。所以奇怪实际上是在定义
x = x + 2
那~在做什么呢?
【问题讨论】:
标签: haskell