2012-09-16 193 views

回答

12

是的,當然可以。唯一重要的事情是,你(總是)爲您的數據的構造函數需要一個名字:

data <name> <para0> <param1> ... = <constructor> <arg0> <arg1> <arg2> ... 

所以對於我們的例子中,它成爲

data Something a b = Constructor (a -> b) Something1 Something2 
+0

這裏'Constructor'是數據的構造函數,而不是類型構造。類型構造函數是'Something'。它被稱爲類型構造函數,因爲當你將它應用到某個東西時,你有一個類型('Something a b'),而如果你將一個數據構造函數應用於某個東西,你就有一些數據('Constructor f x y')。 – Rotsor

+0

@Rotsor解決這個問題 – fuz

5

有一些規則應遵循的命名構造函數。

  • 以大寫字母開頭。
  • 可以包含下劃線,單引號,字母和數字。
  • 構造函數可以是運算符名稱,只要它們以':'開頭即可。

但ofcourse你可以在數據定義功能,如

data Something a b = Something (a->b) a b 
相關問題