Dyl*_*nSp 1 haskell operator-overloading
我正在尝试重新实现Haskell中列表数据类型的一些功能以用于学习目的.当我尝试:使用此代码重新定义时:
{-# LANGUAGE NoImplicitPrelude #-}
data List a = Nil
| Cons a (List a)
(:) :: a -> List a -> List a
(:) = Cons
Run Code Online (Sandbox Code Playgroud)
我收到以下错误stack runghc:
类型签名无效:(:) :: ...
应该是<variable> :: <type>形式
重新定义是不可能的:?这就是我收到这个错误的原因吗?
Dan*_*ner 10
重新定义是不可能的:,但这不是你得到错误的原因.您收到该错误,因为它:被认为是"大写标点符号" - 也就是说,任何以...开头的名称:必须是(中缀)值构造函数.然而,即使使用NoImplicitPrelude并RebindableSyntax打开,您也会发现,例如
data Foo = Foo : Foo
Run Code Online (Sandbox Code Playgroud)
给你一个错误,说:
error: Illegal binding of built-in syntax: :
Run Code Online (Sandbox Code Playgroud)
据推测,通过一些额外的工程努力,未来的GHC可以支持重新定义:并启用一些合适的扩展,但目前还不可能.