Trying to do a very simple sql query using the postgresql-simple library.
{-# LANGUAGE OverloadedStrings #-}
module Main where
import           Database.PostgreSQL.Simple
main :: IO ()
main = do
  putStrLn "Hello, Haskell!"
f :: Connection -> IO ()
f conn = do
  xs <- query conn "selct 123" ()
  print (xs :: [Int])
The error:
src/Main.hs:12:9-33: error:
    • No instance for (FromRow Int) arising from a use of ‘query’
    • In a stmt of a 'do' block: xs <- query conn "selct 123" ()
      In the expression:
        do xs <- query conn "selct 123" ()
           print (xs :: [Int])
      In an equation for ‘f’:
          f conn
            = do xs <- query conn "selct 123" ()
                 print (xs :: [Int])
 
                        
When dealing with single values that would be returned from the query, it is necessary to wrap using the
Onlydatatype. Soxs :: [Int]should instead bexs :: [Only Int].This is workaround due to this library using tuples to represent the values, which Haskell does not support a tuple with a single element. https://hackage.haskell.org/package/postgresql-simple-0.6.4/docs/Database-PostgreSQL-Simple.html#g:5