Gue*_*OCs 1 postgresql haskell functional-programming
我试图在haskell中理解这个简单的postgresql示例
main :: IO ()
main = do
conn <- connect localPG
mapM_ print =<< (query_ conn "SELECT 1 + 1" :: IO [Only Int])
Run Code Online (Sandbox Code Playgroud)
query_ :: FromRow r => Connection -> Query -> IO [r]
Run Code Online (Sandbox Code Playgroud)
怎么可能"SELECT 1 + 1" :: IO [Only Int]是Query?
查看类型Query https://hackage.haskell.org/package/postgresql-simple-0.4.10.0/docs/src/Database-PostgreSQL-Simple-Types.html#Query的来源对我没有帮助:
newtype Query = Query {
fromQuery :: ByteString
} deriving (Eq, Ord, Typeable)
Run Code Online (Sandbox Code Playgroud)
我没有看到IO [Only Int]和之间的联系Query
类型注释IO [Only Int]适用于整个表达式query_ conn "SELECT 1 + 1",而不仅仅是它的最后一个参数。
字符串"SELECT 1 + 1"本身可以是类型,Query因为该类型Query具有 的实例IsString。
这就是字符串文字在 Haskell 中的工作方式(前提OverloadedStrings是打开):字符串文字具有 type IsString a => a,编译器使用该fromString方法将实际字符串转换为预期类型。