PureScript - 使用 Fat Arrow 而不是 Thin Arrow
PureScript - Using Fat Arrow instead of Thin Arrow
考虑以下 PureScript 代码,它是手册中示例的略微修改版本:
module ArrayRecursion where
import Prelude (discard, Unit)
import Data.Array (null, tail)
import Data.Maybe (fromMaybe)
length :: forall a. Array a => Int
length arr =
if null arr then
0
else
1 + ( length $ fromMaybe [] $ tail arr)
编译此代码会产生以下错误
Unknown type class Array
所以代码无法编译。
问题:
类型class数组是从哪里导入的?它似乎不是从 Prelude 或 Data.Array.
导入的
如何找到导入 PureScript 类型 classes 的位置?在这种情况下,在 Pursuit 中搜索“Array”会产生数百个结果,从而造成大海捞针问题。
Array
不是 类型 class,而是 类型 .
您不小心在 Array a
之后放了一个粗箭头而不是细箭头,这让您看起来像是在用约束 Array a
而不是一个 Int
类型声明一个值以 Array a
作为参数和 returns 为 Int
的函数。它应该是这样的:
length :: forall a. Array a -> Int
通常您不会导入 Array
类型。它位于名为 Prim
的模块中,该模块始终被隐式导入。
至于发现 - 是的,在 Pursuit 上搜索。如果你仔细看the search results,你会发现其中只有一个(第一个)实际上是一个类型。所有其他的都是函数或 ADT 案例。
另一种搜索内容(尤其是标准库中的内容)的方法是 IDE 集成。这些天我几乎从来不需要在我的文件顶部手动添加导入。我只是开始输入我需要的任何名称,IDE 支持为我提供了一些选项,等待我选择,并自动添加导入。 10/10 推荐。
考虑以下 PureScript 代码,它是手册中示例的略微修改版本:
module ArrayRecursion where
import Prelude (discard, Unit)
import Data.Array (null, tail)
import Data.Maybe (fromMaybe)
length :: forall a. Array a => Int
length arr =
if null arr then
0
else
1 + ( length $ fromMaybe [] $ tail arr)
编译此代码会产生以下错误
Unknown type class Array
所以代码无法编译。
问题:
类型class数组是从哪里导入的?它似乎不是从 Prelude 或 Data.Array.
导入的如何找到导入 PureScript 类型 classes 的位置?在这种情况下,在 Pursuit 中搜索“Array”会产生数百个结果,从而造成大海捞针问题。
Array
不是 类型 class,而是 类型 .
您不小心在 Array a
之后放了一个粗箭头而不是细箭头,这让您看起来像是在用约束 Array a
而不是一个 Int
类型声明一个值以 Array a
作为参数和 returns 为 Int
的函数。它应该是这样的:
length :: forall a. Array a -> Int
通常您不会导入 Array
类型。它位于名为 Prim
的模块中,该模块始终被隐式导入。
至于发现 - 是的,在 Pursuit 上搜索。如果你仔细看the search results,你会发现其中只有一个(第一个)实际上是一个类型。所有其他的都是函数或 ADT 案例。
另一种搜索内容(尤其是标准库中的内容)的方法是 IDE 集成。这些天我几乎从来不需要在我的文件顶部手动添加导入。我只是开始输入我需要的任何名称,IDE 支持为我提供了一些选项,等待我选择,并自动添加导入。 10/10 推荐。