Я хочу добавить, что @
работает на всех уровнях, что означает, что вы можете сделать это:
let a @ (b @ (Just c), Just d) = (Just 1, Just 2) in (a, b, c, d)
Который затем будет производить это: ((Just 1, Just 2), Just 1, 1, 2)
Так что, по сути, это способ привязать шаблон к значению. Это также означает, что он работает с любым шаблоном, а не только со списками, как показано выше. Это очень полезная вещь, поскольку вы можете использовать ее во многих других случаях.
В этом случае a
- это целое Maybe Tuple
, b
- это только первый Just
в кортеже, а c
и d
- значения, содержащиеся в первом и втором Just
в кортеже соответственно