我有这个:
get3th (_,_,a,_,_,_) = a
在GHCI中可以正常工作,但是我想用GHC编译它并给出错误。如果我想编写一个函数来获取元组的第n个元素并能够在GHC中运行,该怎么办?我的所有程序都如下所示,该怎么办?
get3th (_,_,a,_,_,_) = a
main = do
mytuple <- getLine
print $ get3th mytuple
您的问题是getLine
给您一个String
,但是您想要某种元组。您可以通过将转换String
为元组来解决问题,例如,使用内置read
函数。第三行尝试将解析String
为Int
s的六元组。
main = do
mystring <- getLine
let mytuple = read mystring :: (Int, Int, Int, Int, Int, Int)
print $ get3th mytuple
但是请注意,尽管这对于了解类型等很有用,但您切勿在实践中编写此类代码。至少有两个警告标志:
您的元组包含三个以上左右的元素。这样的元组很少需要,并且通常可以用列表,向量或自定义数据类型替换。元组很少用于临时地将两种数据变成一个值。如果您经常开始使用元组,请考虑是否可以创建自己的数据类型。
使用read
读取结构不是一个好主意。read
会在任何微小的小错误时以可怕的错误消息爆炸您的程序,而这通常不是您想要的。如果需要解析结构,则最好使用真实的解析器。read
对于简单的整数等就足够了,但仅此而已。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句