How do I get the OverloadedStrings language extension working?

末鹿安然 提交于 2019-12-05 08:50:14

问题


I've enabled overloaded strings, but I can't get them to work:

$ 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.

Where do I import the IsString instances for ByteString from? Shouldn't this happen automatically? What am I doing wrong?


回答1:


You need to import the .Char8 modules, such as Data.ByteString.Char8 and Data.ByteString.Lazy.Char8



来源:https://stackoverflow.com/questions/3815442/how-do-i-get-the-overloadedstrings-language-extension-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!