Haskell中的嵌套模式是什么?

mac*_*ian 5 haskell design-patterns nested pattern-matching ghc

什么是Haskell中的'嵌套'模式.我到处都听到这个词,但我不确定它到底意味着什么.你会如何定义它?任何例子?

提前致谢.

编辑添加:(如教科书中所引用)

"模式可以包含文字和嵌套模式,如示例中所示:

addPair (0,y) = y

addPair (x,y) = x+y


shift :: ((Int,Int),Int) -> (Int,(Int,Int))

shift ((x,y),z) = (x,(y,z))
Run Code Online (Sandbox Code Playgroud)

Mik*_*kov 6

这意味着您可以匹配包含其他模式的模式.在您的示例中,(x, y)模式包含在较大的((x, y), z)模式中.嵌套可以任意深度,例如以下所有都是合法的:

f    ((x2,x0),x1)                 = ()
f'   (((x3, x2),x0),x1)           = ()
f''  ((((x4,x3), x2),x0),x1)      = ()
f''' (((((x5,x4),x3), x2),x0),x1) = ()
Run Code Online (Sandbox Code Playgroud)

等等.这也扩展到列表和代数数据类型:

f  [[x]]   = ()
f' [[[x]]] = ()

g  (Just (Just x))        = ()
g' (Just (Just (Just x))) = ()
Run Code Online (Sandbox Code Playgroud)

在这里,f获取列表列表,f'获取列表列表,g获取Maybe包含另一个列表Maybe(即,Maybe (Maybe a)),并g'采取Maybe (Maybe (Maybe a))