2016-04-07 109 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] 
相关问题