我该如何让Haskell将某些内容解释为特定类型呢? 举个例子,我有一个列表,想要将其长度除以2。 那么我可以这样写:
(length mylist) / 2
并得到以下错误:
使用`/'时,没有实例(Fractional Int)
由于我想要整数除法,所以我想让length mylist
,2
和结果Int
。
这里有两个不同的问题。
整数除法:使用div
函数:div(length mylist) 2
或者(length mylist) `div` 2
类型转换。可以通过写expression :: type
来告诉Haskell一个特定表达式的类型,而不是仅仅写expression
。然而,这并不会对值进行“转换”或“转型”。一些有用的函数用于在各种数字和字符串类型之间进行转换,包括fromIntegral
、show
、read
、realToFrac
、fromRational
、toRational
、toInteger
等。你可以在Hoogle上查找这些函数。
div (length my list) 2
。 /
表示分数除法,div
则表示整数除法。
Data.List
中有一个名为genericLength
的函数。在您的情况下,它可能不会返回整数答案,但通常很有用,因为它可以避免一些尴尬的fromIntegral
调用。 - Matvey AksenovfromIntegral
。但说真的,fromIntegral
是将 Int “转换”为任何实例化了Num
类型类的神奇方式。 - Dan Burton