标签: overloaded-strings

将字符串文字限制为仅限文本

我知道OverloadedStrings语言编译指示包含fromString所有字符串文字的隐含.我想要做的不是实际上重载字符串,而只是改变它们的含义以便它们总是被转换为Text,因此,使用字符串文字作为字符列表应该导致类型错误.

如果不导入IsString该类的String实例,则导入该类似乎是不可能的.ghc是否为我提供了一些限制字符串文字的方法Text

haskell ghc string-literals overloaded-strings

36
推荐指数
1
解决办法
3632
查看次数

如何使OverloadedStrings语言扩展工作?

我已经启用了重载字符串,但我无法让它们工作:

$ 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 …
Run Code Online (Sandbox Code Playgroud)

haskell ghc overloaded-strings

27
推荐指数
1
解决办法
1万
查看次数

使用重载字符串

OverloadedStrings扩展非常有用,但它有一些缺点.请考虑以下函数定义:

someFunction :: ToJSSTring a => a -> IO ()
someFunction = js_function . toJSSTring
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果我想传递一个文字值,我必须在OverloadedStrings启用时显式添加一个类型签名:

someFunction ("This is plain string" :: String)
someFunction ("And this one is Text" :: Data.Text.Text)
Run Code Online (Sandbox Code Playgroud)

这种必要性的原因是非常明显的,我想这OverloadedStrings是为了简化文字值传递给具有严格类型签名的函数,使开发人员无需在pack任何Text需要值的地方编写代码.

问题是,有没有办法,默认所有没有类型签名的字符串文字Text,或String?或者我应该将我的代码拆分为一般函数(使用ToJSString类型约束)和任意函数,它们的参数具有严格的类型签名?

haskell language-extension overloaded-strings ghcjs

11
推荐指数
1
解决办法
3640
查看次数

为什么 IsList 需要 toList?

使用时-XOverloadedStrings你可以实现IsString只需要一个函数fromString。现在,如果您想使用字符串文字进行模式匹配,您还必须实现Eq,这是有道理的:

f :: MyString -> Bool
f "foo" = True
f _ = False

-- equivalent to
f x
  | x == fromString "foo" = True
  | otherwise             = False
Run Code Online (Sandbox Code Playgroud)

但是,为什么使用的IsList类型类-XOverloadedLists需要您实现toList?在wiki 中,唯一提到的用例toList是模式匹配。我知道这Eq对于列表模式匹配是不够的。但后来toList应该是在唯一需要不同类型的类,如果你想使用列表模式匹配与你的类型,就像IsString没有要求 Eq

对我来说,令人讨厌的事情是fromList . toList = id必须满足条件,但是对于某些类型(例如无序集合,它不能保证元素的顺序保持不变),这根本无法保证。

这似乎非常不一致。

haskell overloaded-strings overloaded-lists

9
推荐指数
1
解决办法
149
查看次数

为什么我从GHCi收到此警告?

模式匹配时我收到一个好奇的警告,但只有当OverloadedStrings被启用时...

$ ghci -Wall
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> let f x = case (x :: [String]) of {[""] -> "root"; ["product", _] -> "product"; _ -> "unknown"}
Prelude> :q
Leaving GHCi.
$ ghci -Wall -XOverloadedStrings
GHCi, version 6.12.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... …
Run Code Online (Sandbox Code Playgroud)

warnings haskell case-statement ghc overloaded-strings

6
推荐指数
1
解决办法
1795
查看次数

不能将assign-op运算符用于重载对象或字符串偏移

我有这部分代码,它给了我标题中的错误.

$k每张桌子的计数从1到5.

$myarray 由至少3到4个名字组成.

错误发生在$qu .=......

我试过到目前为止:改变VARIABLENAME $i$v{$i}$qu .=线路.

那么有没有可能迭代查询?因此它ANDWHERE子句中的数量与数组的数量一样多吗?

while ($k<=5) {
  $queryname = "SELECT Name FROM description";
  $qname = mysql_query($queryname,$link);

  while ($reihe = mysql_fetch_object($qname)) {
    {
      $unse = unserialize($reihe->Name);
      {
        foreach ($unse as $j=>$h)
          foreach ($h as $m) {
            $myarray = preg_split('/ |\s| /',$m);
            {
              echo "<br>";
              $array_empty = $myarray;
              $empty_elements = array("");
              $myarray = array_diff($array_empty,$empty_elements);
              var_dump($myarray);
              for ($i=1; $i<=count($myarray); $i++) {
                $v{$i} = $myarray[$i];
                echo …
Run Code Online (Sandbox Code Playgroud)

php mysql overloaded-strings

5
推荐指数
1
解决办法
7741
查看次数

为什么ByteString不会自动转换为FilePath?

我将(严格)传递ByteString给期望a的东西System.IO.FilePath,声明为type FilePath = String.我也在用{-# LANGUAGE OverloadedStrings #-}.我在某些地方的转换是自动发生的,但在这里却没有.我有什么问题?

Main.hs:33:40: error:
    • Couldn't match type ‘ByteString’ with ‘[Char]’
      Expected type: FilePath
        Actual type: ByteString
Run Code Online (Sandbox Code Playgroud)

haskell type-conversion bytestring overloaded-strings

3
推荐指数
1
解决办法
138
查看次数

Utf8和Haskell中重载的字符串

我意识到我的文本中的重音转换为 .我将其归结为以下示例,该示例写入(并覆盖)文件test.txt.

它只使用Data.Text中的方法,它们应该处理unicode文本.我检查了源文件和输出文件都是用utf8编码的.

{-# LANGUAGE OverloadedStrings #-}

import Prelude hiding (writeFile)
import Data.Text
import Data.Text.IO

someText :: Text
someText = "Université"

main :: IO ()
main = do 
    writeFile "test.txt" someText
Run Code Online (Sandbox Code Playgroud)

运行代码后,test.txt包含:Universit .在ghci中,我得到以下内容

*Main> someText
"Universit\233"
Run Code Online (Sandbox Code Playgroud)

这已编码不正确吗?我还在https://hackage.haskell.org/package/text-1.2.2.2/docs/Data-Text.html中找到了对 的评论 ,但我仍然不知道如何纠正上面的例子.

如何在OverloadedString中使用重音并正确地将它们写入文件?

haskell utf-8 overloaded-strings

1
推荐指数
1
解决办法
600
查看次数

Haskell使用OverloadedStrings,但是仍然出现[Char]错误

我是从这样的问题理解这个这个,使用PRAGMA OverloadedStrings的手段,我应该能够使用文字作为我的字符串类型。

但是,当我使用文本测试数据类型时,出现以下错误:

$ stack ghci
Prelude> :l myfile.hs
Ok, one module loaded.
*Main> Rec "asd" "m"

<interactive>:46:5: error:
    • Couldn't match expected type ‘Text’ with actual type ‘[Char]’
    • In the first argument of ‘Rec’, namely ‘"asd"’
      In the expression: Rec "asd" "m"
      In an equation for ‘it’: it = Rec "asd" "m"

<interactive>:46:11: error:
    • Couldn't match expected type ‘Text’ with actual type ‘[Char]’
    • In the second argument of …
Run Code Online (Sandbox Code Playgroud)

generics haskell overloaded-strings

0
推荐指数
1
解决办法
91
查看次数