代码之家  ›  专栏  ›  技术社区  ›  dave4420

如何使OverloadedStrings语言扩展工作?

  •  26
  • dave4420  · 技术社区  · 15 年前

    我启用了重载字符串,但无法使其工作:

    $ cat overloadedstrings.hs 
    {-# LANGUAGE OverloadedStrings #-}
    
    import qualified Data.ByteString as B
    import qualified Data.ByteString.Lazy as BL
    
    lazy :: BL.ByteString
    lazy = "I'm a lazy ByteString"
    
    strict :: B.ByteString
    strict = "I'm a strict ByteString"
    
    $ ghci
    GHCi, version 6.12.1: http://www.haskell.org/ghc/  :? for help
    Loading package ghc-prim ... linking ... done.
    Loading package integer-gmp ... linking ... done.
    Loading package base ... linking ... done.
    Prelude> :l overloadedstrings.hs 
    [1 of 1] Compiling Main             ( overloadedstrings.hs, interpreted )
    
    overloadedstrings.hs:7:7:
        No instance for (Data.String.IsString BL.ByteString)
          arising from the literal `"I'm a lazy ByteString"'
                       at overloadedstrings.hs:7:7-29
        Possible fix:
          add an instance declaration for
          (Data.String.IsString BL.ByteString)
        In the expression: "I'm a lazy ByteString"
        In the definition of `lazy': lazy = "I'm a lazy ByteString"
    
    overloadedstrings.hs:10:9:
        No instance for (Data.String.IsString B.ByteString)
          arising from the literal `"I'm a strict ByteString"'
                       at overloadedstrings.hs:10:9-33
        Possible fix:
          add an instance declaration for (Data.String.IsString B.ByteString)
        In the expression: "I'm a strict ByteString"
        In the definition of `strict': strict = "I'm a strict ByteString"
    Failed, modules loaded: none.
    

    IsString 的实例 ByteString 从哪里来的?这不应该自动发生吗?我做错什么了?

    1 回复  |  直到 15 年前
        1
  •  29
  •   Thomas M. DuBuisson    15 年前

    你需要导入 .Char8 Data.ByteString.Char8 Data.ByteString.Lazy.Char8

    推荐文章