2010-02-12 48 views
7

我剛安裝了最新版本的F#,並打開了一箇舊的解決方案,看看它會告訴我什麼。F#2.0命名空間警告

這是一個多文件解決方案,其中第一個文件包括列表模塊上的一些「擴展功能」:

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) 
     | _   -> [] 

編譯器不再喜歡這一點,並說:

文件在庫或多文件應用程序中,必須以名稱空間或模塊聲明開始,例如'命名空間SomeNamespace.SubNamespace' 或 '模塊SomeNamespace.SomeModule'

但是,如果我這樣做:

module Foo.List = 

它說:

模塊縮寫必須是一個簡單的名字,不是路徑

我在這裏錯過了什麼?這個'特殊'案例的解決方案是什麼,我在擴展來自其他地方的模塊?

回答

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.hdList.tl已更名爲List.headList.tail

+0

hd - > head and tl - > tail?這些人不關心代碼高爾夫嗎? :) – Benjol

+2

:) - 將它們添加回來,因爲您已經將功能添加到List模塊中... –

+3

答案的另一半很混亂,如果您沒有命名空間,只有一個模塊,您肯定不會在模塊聲明之後放置一個=。但是如果你有一個命名空間,你需要一個= – Benjol