import PhoneNumberKit
let phoneNumberKit = PhoneNumberKit()
do {
let phoneNumber = try phoneNumberKit.parse(yourNumberString)
let national = phoneNumber.nationalNumber // that's what you ask for
}
catch let error {
// handle error
}
嗨,我是Some errors and difficulties with Haskell function composition的提问者,现在又遇到了麻烦。为什么这个简单的代码无效? 这是不工作的代码列表:
*Main> (negate.abs) -7
<interactive>:26:1: error:
? Non type-variable argument in the constraint: Num (c -> c)
(Use FlexibleContexts to permit this)
? When checking the inferred type
it :: forall c. (Num (c -> c), Num c) => c -> c
上面有相同的错误消息。我无法弄清楚,所以我能得到一些帮助,说明它为什么不起作用,我该如何解决?而且我也想了解错误信息的含义,以及为什么只有最后一个工作。谢谢。
答案 0 :(得分:9)
如果我们看一下表达式:
(negate.abs) -7
我们实际上看到了一个减法。确实:我们从7
中减去(negate . abs)
,所以对于Haskell,它看起来像你写的:
(negate.abs) - (7)
现在,如果你执行减法,两个操作数都需要是Num
(并且两个参数需要具有相同的类型,但这里不相关),因为(-)
具有类型{ {3}}
其他表达式面临同样的问题(当然,虽然有不同的细节)。
解决问题的方法是让Haskell明白-
是一元减去与7
相关的,我们可以通过使用括号来做到这一点:
(negate.abs) (-7)
但我们也可以通过其他方式隔离它,例如使用let
语句:
let minusseven = -7 in (negate.abs) minusseven