我一直在做F#开发一段时间,我喜欢它.然而,我知道在F#中不存在的一个流行语是更高级的类型.我已经阅读了关于高等类型的材料,我想我理解他们的定义.我只是不确定他们为什么有用.有人可以在Scala或Haskell中提供一些高级类型易于使用的示例吗?这需要F#中的变通方法?同样对于这些示例,如果没有更高级的类型(或F#中反之亦然),解决方法是什么?也许我只是习惯于解决它,我没有注意到这个功能的缺席.
(我认为)我得到的不是myList |> List.map f
或myList |> Seq.map f |> Seq.toList
更高的kinded类型允许你简单地写myList |> map f
,它将返回一个List
.这很好(假设它是正确的),但似乎有点小?(并且不能简单地通过允许函数重载来完成?)我通常转换为Seq
无论如何然后我可以转换为我想要的任何东西.再说一次,也许我只是习惯于解决它.但有没有任何一个例子,高级类型的类型真的可以节省你的击键或类型安全?
Scala具有Iterable[A]
定义的特征
def flatMap[B](f: (A) ? GenTraversableOnce[B]): Iterable[B]
Run Code Online (Sandbox Code Playgroud)
这肯定看起来像monad上的绑定函数,并且文档暗示它是monad,但有两个异议,一个是minor和一个major:
GenTraversableOnce
.我认为这只是一种在评判monad时可以忽略的便利.这些问题会破坏收藏品的单一性吗?