我正在寫一些mysql-simple數據庫代碼,並且讓我的QueryResults類型類的數據類型成員很容易讓它們變得不自在。結合可能作爲單子線成更普通的東西
但我結束了很多功能,如:
data FullName {
first_name :: String,
middle_name :: String,
last_name :: String
} deriving Show
newtype UID = UID Integer deriving Show
go :: [(String, String)] -> Maybe FullName
go fvs = do
first <- lookup "first_name" fvs
middle <- lookup "middle_name" fvs
last <- lookup "last_name" fvs
return $ FullName first middle last
go :: [(String, String)] -> Maybe UID
go fvs = do
uid <- lookup "uid" fvs
return $ UID (read uid)
哪裏查找僅返回(也許)。其中一些數據類型在其中有十幾列,所以這會變得單調乏味。
所以也有很多這樣的數據類型的,我希望能夠寫一個函數我會叫這樣的:
go RealName ["first_name","middle_name","last_name"] fvs
go UID ["uid"] fvs
,但我不知道這樣的事情的類型應該是,或者我會怎樣去做。也許這是不可能的。
'UID'需要一個'Integer',但你的(第二個)'go'函數似乎給它一個'String'。 (我認爲這兩個'go'函數應該有不同的名字。) – dave4420 2012-07-19 17:41:39
你的'go'的第一個定義的類型爲[[(String,String)] - > Maybe FullName',你的第二個定義的類型爲'[(String ,String)] - >也許UID';如果你真的需要這個,你必須創建一個包含「'go :: [(String,String)] - > Maybe a'」的類型類併爲你的類型創建實例。 – Thedward 2012-07-19 18:00:05
對不起,我忘了把閱讀內容放在我的測試代碼中。它被編輯。 – 2012-07-19 19:28:39