2016-04-07 66 views
0

我有這個功能,所有varXMaybe Something類型:有沒有辦法在變量列表中調用字段?

res <- execute cn "insert into users values ..." [ toField var1 
    , toField var2 
    , toField var3 
    , toField var4 
    ] 

我可以帶或類似的東西簡化呢?我已經試過這樣:

res <- execute cn "insert into my_table values ..." toField <$> [var1, var2, var3, var4] 

這可能是因爲toField不返回一個列表? toField是從posgresql-simple

回答

2

這取決於什麼var1 ... var4是例如

show <$> [Just 1, Just 'a',Just "a",Just 3.1415] 

不正確,因爲GHC不能統一列表裏面的類型 - 儘管應用show後一切都是String

另一方面,如果你有

var1,var2,var3,var4 :: Maybe a 

即它們都具有相同的類型(某些類型的a這是類ToField的實例),你可以做

res <- execute cn "insert into my_table values ..." (toField <$> [var1, var2, var3, var4]) 

爲@ChadGilbert已經說過。

4

您需要明確地將映射的值作爲單個參數發送到execute。您可以在括號或前綴包裹toField <$> [var1, var2, var3, var4]$

res <- execute cn "insert into my_table values ..." $ toField <$> [var1, var2, var3, var4] 
相關問題