2016-02-20 26 views
0

首先,我想道歉,如果我重複這一點,但我到處搜索,而沒有找到我的問題的答案。沒有輸入值和多種基本類型的數據類型

假設我有以下代碼:

data TestType = Nothing | Int | Float deriving (Show) 

jaykay :: TestType -> [Char] 
jaykay Int = "This is an int" 
jaykay Float = "This is float!" 
jaykay a = "Nothing matched.." 

main :: IO() 
main = do 
    jaykay [PLACE HOLDER] 

顯然,這類型沒有任何價值構造(或多個)。所以我想我可以在這裏做的是從原始類型創建一個類型,通常會在定義中保存指定值的任何值。我的問題是關於如何構造這種類型的實例,以及如果這個定義不正確,我將如何實現前面描述的?

感謝

+0

從「DataBase.HDBC」中檢查['sqlValue'](http://hackage.haskell.org/package/HDBC-2.4.0.1/docs/src/Database-HDBC-SqlValue.html#line-201) –

回答

3

其實,你的類型確實有值構造 - 他們三個人,其實命名NothingIntFloat。所以,可以寫下如

main = putStrLn (jaykay Int) 

並且運行程序會打印出This is an int。但是,我懷疑你希望你的構造函數接受相關類型的參數;所以你可能想寫類似

data TestType = Nothing | Int Int | Float Float 

使之與Int構造將包含Int類型的附加價值構建TestType類型的值;同樣用Float構造函數構造的那些將包含類型爲Float的值。 (NB有兩個不同的命名空間來了!還有是來自Prelude一個類型級別名稱Int,現在你也定義的值級別Int其類型爲Int -> TestType

使用這種更令人興奮的一個例子新數據類型將是:

jaykay (Int i) = "got the Int " ++ show i 
jaykay (Float f) = "got the Float " ++ show f 
jaykay a = "dunno lol" 

main = putStrLn (jaykay (Int 3)) 

運行該程序將打印出got the Int 3

+0

謝謝,我現在明白了。事實上,我想要做的是形成一種可以處理某種基本類型的類型。再次感謝您的詳細解答。 – ymg