相关疑难解决方法(0)

了解Haskell的RankNTypes

在通过GHC扩展工作的同时,我遇到RankNTypes了Haskell学院,其中有以下示例:

main = print $ rankN (+1)

rankN :: (forall n. Num n => n -> n) -> (Int, Double)
rankN f = (f 1, f 1.0)
Run Code Online (Sandbox Code Playgroud)

该文章提供了另一种类型rankN:

rankN :: forall n. Num n => (n -> n) -> (Int, Double) 
Run Code Online (Sandbox Code Playgroud)

对差异的解释是"后一个签名需要从n到n的函数用于某些Num n;前一个签名需要从n到n的函数,每个Num n."

我可以理解,前一种类型需要签名是括号中的或更一般的.我不明白后一个签名只需要一个n -> n"某些Num n" 功能的解释.有人可以详细阐述和澄清吗?你如何"阅读"这个以前的签名,这听起来像它的含义?后者的签名是否相同Num n => (n -> n) -> (Int, Double)而不需要forall

haskell types

7
推荐指数
3
解决办法
549
查看次数

标签 统计

haskell ×1

types ×1