Haskell 隐式转换

标签 haskell type-conversion

您好,我一直在寻找使用 Data.Text.intercalate 并且来自 Hackage 我不明白为什么该方法具有以下签名:

intercalate::Text -> [Text] -> Text

为什么那么,这样行吗

T.intercalate "NI!" ["We", "seek", "the", "Holy", "Grail"]
"WeNI!seekNI!theNI!HolyNI!Grail" 

你不应该在列表的每个元素之前应用 Data.Text.pack 吗?
来源:http://hackage.haskell.org/package/text-1.2.3.1/docs/Data-Text.html

就我而言,我想打包以下内容:

输入 :"{" ,mytext ,"}" #mytext::Text
我正在这样做:
Prelude.intercalate(Data.Text.pack ",") [pack "{",mytext, pack "}"]

(pack "{")++ mytext++ 包 "}")
有人可以解释一下为什么 Data.Text 公开与 Data.List 相同的方法(在我们的例子中是 intercalate)和它如何在 CharText 之间进行隐式转换?

最佳答案

您可能启用了 -XOverloadedStrings(或使用文件顶部的 {-# LANGUAGE OverloadedStrings #-} 启用它)。

因此,这意味着字符串 literals(不是字符串变量,只有文字)可以被任何 IsString 解释。输入。

TextIsString 类型。所以这意味着你在字符串 literals 周围隐式使用 pack (同样是文字,而不是普通变量)。

数字字面量也会发生类似的情况:数字字面量可以是任何 Num 类型。根据您在数字文字上调用的函数,Haskell 可以得出确切的类型,从而相应地“解释”文字。例如,如果你写 atan2 1 2,那么 12 应该被解释为 RealFloat 类型,而对于quot 1 212 被解释为 Ìntegral` 类型。

关于Haskell 隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52743607/

相关文章:

haskell - GHC Haskell 何时自动内存?

haskell - 为什么我的 IO 在 Erlang 中运行得这么慢?

java - 从 Java 调用 Haskell,中间使用 C

haskell - 用 Parsec 解析 Haskell 的子集

将 'char *' 转换为 'signed char *'

用于隐式类型转换的 C++ 构造函数

c++ - 无法在 pthread 中从类型 void* (类名)(void*) 转换为类型 void* (*)(void*)

Haskell 多态性和类型类实例

c# - "x as X != null"和 "x is X"总是返回相同的结果吗?

c++ - unsigned int 和 double 转换顺序