初学者:在Haskell中转换类型

初学者:在Haskell中转换类型,haskell,types,Haskell,Types,第一个帖子在这里,请对我放轻松。发现了几个有类似问题的线程,没有一个线程直接应用,或者如果有一个线程应用了,那么执行过程就足够让我头疼了 如果我的代码p=['1','2','3','4']将数字存储为p中的字符,我如何创建一个可以等于[1,2,3,4]的列表q? 我一直在尝试各种各样的事情,主要是我的q超出了范围,或者任何我试图转换的函数Char->Int都没有附带的绑定。 我似乎到处都能找到这样一种迹象,即存在digitToInt,其中digitToInt'1'应产生1的输出,但我显然缺乏绑定

第一个帖子在这里,请对我放轻松。发现了几个有类似问题的线程,没有一个线程直接应用,或者如果有一个线程应用了,那么执行过程就足够让我头疼了

如果我的代码
p=['1','2','3','4']
将数字存储为
p
中的字符,我如何创建一个可以等于
[1,2,3,4]
的列表
q
? 我一直在尝试各种各样的事情,主要是我的q超出了范围,或者任何我试图转换的函数
Char->Int
都没有附带的绑定。 我似乎到处都能找到这样一种迹象,即存在
digitToInt
,其中
digitToInt'1'
应产生
1
的输出,但我显然缺乏绑定,即使使用此页面的确切输入:

在这一点上读更多的东西,我只是变得更加困惑。请帮助我找到一个可行的解决方案,告诉我哪里出了问题,或者解释一下为什么这个
digitToInt::Char->Int
似乎一点也不适合我


谢谢。

DigitPoint已经存在了。它以前住在
Char
模块中,但现在它住在
Data.Char
中,因此我们必须
导入Data.Char
才能使用它

Prelude> import Data.Char
Prelude Data.Char> digitToInt '1'
1
您可以使用
map digitToInt
对列表的每个元素使用
digitToInt
<代码>映射::(a->b)->[a]->[b]将函数
(a->b)
应用于
a
s、
[a]
列表的每个元素,以获得
b
的列表

Prelude Data.Char> map digitToInt ['1', '2', '3', '4']
[1,2,3,4]
缺少附带的装订 您不需要通过编写它的类型签名来定义
digitToInt
或其他导入
digitToInt::Char->Int
。没有那种约束力的签名

alwaysSeven :: Char -> Int
将给出以下错误

The type signature for `alwaysSeven' lacks an accompanying binding
仅当类型签名出现在声明之前时,才提供类型签名

alwaysSeven :: Char -> Int
alwaysSeven x = 7

在不导入任何内容的情况下,您也可以使用一个非常简单的技巧,在读取值之前,将(
(:[])
)字符推送到一个空列表(生成一个单例列表):

map (read . (:[])) "1234"
这将需要列表类型的上下文是可推断的,但它将适用于您想要的任何类型,而无需修改。否则,您需要自己指定类型:

(map (read . (:[])) "1234") :: [Int]
-- [1,2,3,4]
(map (read . (:[])) "1234") :: [Double]
-- [1.0,2.0,3.0,4.0]

您需要导入
Data.Char
才能访问
digitToInt
功能。然后,您可以使用
映射DigitPoint p
将函数映射到列表中。还要注意的是,
['1','2','3','4']
相当于
“1234”
@domi当您寻找一个函数或一个与已知签名匹配的函数时,请使用它来查找所有的黑客或标准库。@gxtaillon我被困在一个更简单的层次上。在我开始寻找更多函数之前,我至少应该让真正基本的函数为我工作,而且似乎我写的每一行都像x::。。。我回来时不在“x”范围内。我正在关注youtube教程,并将其与我看到的为他人工作的内容放在一起。不确定使用Eclipse是否会导致这种情况,但我觉得很奇怪…@domi Eclipse?上次我检查的时候,插件根本就没什么用处。出于所有目的,对于简单的应用程序,我会坚持使用文本编辑器和
ghci
,对于更大的应用程序,我会坚持使用
cabal
。您使用过ghci吗?没有,我想习惯在一个环境中工作,这个环境为我提供了一个代码记事本区域和控制台命令面板,这样我就可以在控制台中玩,然后在工作时添加到源代码中。我想我已经习惯了MatLab,现在太喜欢快速跑步了我会听从您的建议,现在就尝试
ghci
,但是如果您能想到一个合适的分屏环境,请告诉我。谢谢!我不知道导入模块。