我刚刚安装了最新版本的F#,并打开了一个旧解决方案,看看会告诉我什么。
这是一个多文件解决方案,其中第一个文件包含List模块上的一些“扩展函数”:
module List =
///Given list of 'rows', returns list of 'columns'
let rec transpose lst =
match lst with
| (_::_)::_ -> List.map List.hd lst :: transpose (List.map List.tl lst)
| _ -> []
编译器不再喜欢这个,并说:
库或多文件应用程序中的文件必须以命名空间或模块声明开头,例如'namespace SomeNamespace.SubNamespace'或'module SomeNamespace.SomeModule'
但如果我这样做:
module Foo.List =
它说:
模块缩写必须是简单名称,而不是路径
我在这里缺少什么?那个“特殊”案例的解决方案是什么,我正在扩展来自其他地方的模块?
答案 0 :(得分:6)
明确命名空间:
namespace Microsoft.FSharp.Collections
module List =
///Given list of 'rows', returns list of 'columns'
let rec transpose lst =
match lst with
| (_::_)::_ -> List.map List.head lst :: transpose (List.map List.tail lst)
| _ -> []
请注意,List.hd
和List.tl
已重命名为List.head
和List.tail
。