有没有办法在变量列表上调用toField?

时间:2016-04-07 17:34:03

标签: haskell

我有此功能,其中所有varX的类型为Maybe 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 个答案:

答案 0 :(得分:4)

您需要将作为单个参数映射的值显式发送到(sideNavigationController?.rootViewController as? NavigationController)?.pushViewController(MySecondViewController(), animated: true) 。您可以将execute括在括号中,也可以用toField <$> [var1, var2, var3, var4]

作为前缀
$

答案 1 :(得分: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已经说过的那样。