сопоставление шаблонов конструктора haskell

У меня есть этот тип данных

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". Можете ли вы объяснить, почему я не могу сопоставить конструктор таким образом: применить (исполняемая структура) = ...?

Когда у меня есть несколько конструкторов в моем типе данных, и я должен сопоставлять их все по шаблону, возникает много шаблонного кода.

7
задан user1432699 5 June 2012 в 08:10
поделиться