如何在Haskell中从HDBC转换SqlValue?

如何在Haskell中从HDBC转换SqlValue?,haskell,Haskell,我是Haskell初学者,在HDBC中似乎无法从SqlValues中获取字符串。在ghci中: *Main> import Database.HDBC *Main Database.HDBC> toSql "test" SqlString "test" *Main Database.HDBC> fromSql $ toSql "test" <interactive>:3:1: error: • Non type-variable argument

我是Haskell初学者,在HDBC中似乎无法从SqlValues中获取字符串。在ghci中:

*Main> import Database.HDBC
*Main Database.HDBC> toSql "test"
SqlString "test"
*Main Database.HDBC> fromSql $ toSql "test"

<interactive>:3:1: error:
    • Non type-variable argument
        in the constraint: Convertible SqlValue a
      (Use FlexibleContexts to permit this)
    • When checking the inferred type
        it :: forall a. Convertible SqlValue a => a
*Main Database.HDBC> :set -XFlexibleContexts
*Main Database.HDBC> fromSql $ toSql "test"

<interactive>:5:1: error:
    • Ambiguous type variable ‘a0’ arising from a use of ‘print’
      prevents the constraint ‘(Show a0)’ from being solved.
      Probable fix: use a type annotation to specify what ‘a0’ should be.
      These potential instances exist:
        instance [safe] Show SqlValue
          -- Defined in ‘Database.HDBC.SqlValue’
        instance [safe] Show SqlError
          -- Defined in ‘Database.HDBC.Statement’
        instance (Show b, Show a) => Show (Either a b)
          -- Defined in ‘Data.Either’
        ...plus 45 others
        ...plus 184 instances involving out-of-scope types
        (use -fprint-potential-instances to see them all)
    • In a stmt of an interactive GHCi command: print it
*Main>导入数据库.HDBC
*主数据库.HDBC>toSql“测试”
SqlString“测试”
*Main Database.HDBC>fromSql$toSql“test”
:3:1:错误:
•非类型变量参数
在约束中:可转换的SqlValue a
(使用flexibleContext允许此操作)
•检查推断类型时
对所有a。可转换SqlValue a=>a
*Main Database.HDBC>:set-XFlexibleContexts
*Main Database.HDBC>fromSql$toSql“test”
:5:1:错误:
•因使用“打印”而产生的不明确类型变量“a0”
阻止解决约束“(显示a0)”。
可能的修复:使用类型注释指定“a0”应该是什么。
这些潜在的例子存在:
实例[safe]显示SqlValue
--在“Database.HDBC.SqlValue”中定义
实例[safe]显示SqlError
--在“Database.HDBC.Statement”中定义
实例(Show b,Show a)=>Show(或a或b)
--在“Data.one”中定义
…再加上45个人
…加上184个涉及范围外类型的实例
(使用-fprint潜在实例查看所有实例)
•在交互式GHCi命令的stmt中:打印它

编译器无法推断要打印的内容的类型。可以添加类型批注(如错误消息所示)以使其正常工作:

Prelude Database.HDBC> fromSql $ toSql "test" :: String
"test"