繁体   English   中英

在Haskell中的类型之间转换

[英]Converting between types in Haskell

我正在尝试创建一个简单的函数来在Haskell中返回一个居中的文本字符串,但是我很难找到插入任何一侧的填充量。 我有这个:

center padLength string = round ((padLength - (length string)) / 2)

这给出了以下错误:

No instance for (Fractional Int)
  arising from a use of '/'
Possible fix: add an instance declaration for (Fractional Int)
In the first argument of 'round', namely
  '((padLength - (length string)) / 2)'
In the expression: round ((padLength - (length string)) / 2)
In an equation for `center':
    center padLength string = round ((padLength - (length string)) / 2)

我如何(基本上)从Double(我认为)转换为Int?

问题不在于你不能将Double转换为Int - round来完成那么好 - 这就是你试图在Int( padLength - length string )上进行除法。 错误消息只是告诉您Int不是Fractional的实例, Fractional是可以划分的数字的类型类。

通常,您可以使用fromIntegral (padLength - length string)将其转换为Double,但在这种情况下,您可以直接使用整数除法:

center padLength string = padLength - (length string) `div` 2

a `div` b只是写div ab一种更好的方式; 你可以使用任何函数作为这样的二元运算符。

你试图在整数类型的操作数上使用小数除法/但是没有定义。

您应该在分割之前将操作数转换为Double(使用fromIntegral ),或者使用整数除法div

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM