我已经声明了一个具有以下结构的递归数据类型:
data Path = GET | POST | Slash Path String
Run Code Online (Sandbox Code Playgroud)
我真的想重命名最后一个值构造函数,/
以便我可以在可爱的表达式中添加它GET /"controller"/"action"
.但是,如果我尝试这样做:
import Prelude hiding ((/))
infixr 5 /
data Path = GET | POST | Path / String
Run Code Online (Sandbox Code Playgroud)
...然后我明白了:
Path.hs:4:30: parse error on input `/'
Run Code Online (Sandbox Code Playgroud)
如果我取代那些相同的三条线编译就好/
用:/
或其他特殊字符序列开头:
.
那么,有什么方法可以命名我的值构造函数/
吗?我知道我可以命名它Slash
然后声明一个单独的函数:
(/) :: Path -> String -> Path
(/) = Slash
Run Code Online (Sandbox Code Playgroud)
......但这不会让我模式匹配,如:
request :: Path -> String
request path = case path of GET /"hello" -> "Hello!"
GET …
Run Code Online (Sandbox Code Playgroud)