У меня есть этот тип данных
data Struct val = Empty | Exec1 val
| Exec2 val
И две фиктивные функции
apply :: Struct -> String
apply (Empty) = "matched Empty"
apply (exec struct) = "matched Exec1 or Exec2"
apply' :: Struct val -> String
apply' (Empty) = "matched Empty"
apply' (Exec1 _) = "matched Exec1"
apply' (Exec2 _) = "matched Exec2"
Вторая работает нормально, но первая вызывает ошибку: "Ошибка синтаксического анализа в шаблоне: exec". Можете ли вы объяснить, почему я не могу сопоставить конструктор таким образом: применить (исполняемая структура) = ...?
Когда у меня есть несколько конструкторов в моем типе данных, и я должен сопоставлять их все по шаблону, возникает много шаблонного кода.