gpt4 book ai didi

haskell - 我可以有一个名为 "/"的值构造函数吗?

转载 作者:行者123 更新时间:2023-12-03 14:57:00 24 4
gpt4 key购买 nike

我已经声明了具有以下结构的递归数据类型:

data Path = GET | POST | Slash Path String

我真的很想将最后一个值构造函数重命名为 /这样我就可以用 GET /"controller"/"action"这样的可爱表达方式来修饰它.但是,如果我尝试这样做:
import Prelude hiding ((/))
infixr 5 /
data Path = GET | POST | Path / String

...然后我明白了:
Path.hs:4:30: parse error on input `/'

如果我替换 /,那么同样的三行编译就好了与 :/或任何其他以 : 开头的特殊字符序列.

那么,有什么方法可以命名我的值构造函数 / ?我知道我可以命名它 Slash然后声明一个单独的函数:
(/) :: Path -> String -> Path 
(/) = Slash

...但这不会让我进行模式匹配,例如:
request :: Path -> String
request path = case path of GET /"hello" -> "Hello!"
GET /"goodbye" -> "Goodbye!"

最佳答案

简短的回答:没有。

长答案:类型类、类型名称和数据构造函数必须以大写字母或冒号开头(其中一些需要使用语言扩展)。其他所有内容都必须以小写字母或任何其他允许的符号开头。

请注意,类型变量通常是小写标识符,遵循相同的规则并且不以冒号开头。

另见 the GHC user's guide用于启用类型运算符。我认为始终允许使用数据构造函数。

就您个人而言,我会使用 (:/) .它看起来并没有那么糟糕,过了一段时间你就会习惯忽略冒号。有些人也喜欢尾随冒号,特别是如果数据在某种意义上是“对称的”。

关于haskell - 我可以有一个名为 "/"的值构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4348605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com