那么为什么将类型注释为何时
a
以及b
何时必须为同一类型?
他们不!如果map
确实对输入参数类型和返回类型使用相同的类型变量,则可以,但是map
可以从一种类型转换为另一种类型。这是一个具体的例子:
Maybe.map String.fromInt (Just 42)
String.fromInt
具有类型Int -> String
,我们将其用作的第一个参数Maybe.map
。因此,如果我们尝试将其替换为map
:
String.fromInt : (Int -> String)
Maybe.map : (a -> b ) -> Maybe a -> Maybe b
我们看到Int
替代品a
和String
替代品b
。因此Maybe a
必须是Maybe Int
并且Maybe b
必须是Maybe String
。这意味着如果我们尝试给它一个Maybe String
代替:
Maybe.map String.fromInt (Just "foo")
我们会得到一个错误:
The 2nd argument to `map` is not what I expect:
1 | foo = Maybe.map String.fromInt (Just "foo")
^^^^^^^^^^
This `Just` call produces:
Maybe String
But `map` needs the 2nd argument to be:
Maybe Int
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句