[英]Strange case statement in Haskell
我有以下數據
data A = C1 String | A :@: A
deriving(Show)
app inp = case inp of
a1 :@: a2 -> (C1 "a") :@: (C1 "b")
_ -> C1 "c"
為什么這種情況返回輸入而不是(C1 "a") :@: (C1 "b")
?
*Test> app (C1 "c") :@: (C1 "d")
C1 "c" :@: C1 "d"
如果我將A :@: A
更改為C2 AA
很好
函數應用程序的優先級高於:@:
或任何其他中綴運算符),因此app (C1 "c") :@: (C1 "d")
與(app (C1 "c")) :@: (C1 "d")
,而不是app ((C1 "c") :@: (C1 "d"))
。 后者可以實現您的期望:
*Main> app ((C1 "c") :@@: (C1 "d"))
C1 "a" :@@: C1 "b"
一種更慣用的寫法是app $ (C1 "c") :@: (C1 "d")
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.