types - 处理 F# 的任意数组

标签 types f#

我正在尝试在 F# 中创建一个模块,其中我需要一些由某种任意类型和任意长度的数组组成的类型。

举个例子,假设我需要制作一个用于任意大向量计算的模块。

那么我的想法是

module Vector =
type Vector = V of array<_>
let (+) (v1:Vector) (v2:Vector) = Vector.map2 (+) V1 V2

但这不起作用,因为尚未为向量声明map2函数,这就是问题,如何为具有相同探针和数组的新类型声明map2函数?

最佳答案

数组的函数 map2 已经存在,因此您可以重用它。

但请注意,如果您对 (+) 使用 let 绑定(bind)函数,则只能在类型内部访问它,因此您应该使用静态成员。

然后,要调用现有的 map2 函数,您可以使用模式匹配来分解单例区分联合:

type Vector<'t> = V of array<'t> with
    static member (+) (V v1, V v2) = V (Array.map2 (+) v1 v2)

但是,如果您仍然想为您的类型创建 map2 函数,为了以更通用的方式使用它,您可以像这样创建它:

type Vector<'t> = V of array<'t> with
    static member map2  f (V v1) (V v2) = V (Array.map2 f v1 v2)
    static member (+) (v1, v2) = Vector<_>.map2 (+) v1 v2

关于types - 处理 F# 的任意数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40119422/

相关文章:

C++ 仿函数(映射)

c# - Type.IsSubclassOf() 不适用于 AppDomains?

ios - "' ViewController.Type ' does not have a member named . . . "

f# - 点自由函数不会导致递归,但正常函数会在这里吗?

f# - Visual Studio 中 F# 调用堆栈的问题

python - python 类型注释中的链式引用

python - 将列表项转换为定义的数据类型

f# - 使用 Fable-Elmish 上传文件

types - 如何在 F# 中定义两个相互依赖的类型?

f# - 无法加载文件或程序集 FSharp.Core,版本 = 4.0.0.0