Предупреждение пространства имен F # 2.0 - PullRequest
7 голосов
/ 12 февраля 2010

Я только что установил последнюю версию 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 = 

Там написано:

Аббревиатура модуля должна быть простым именем, а не путем

Что мне здесь не хватает? И каково решение для этого «особого» случая, когда я расширяю модуль, который приходит из других мест?

1 Ответ

6 голосов
/ 12 февраля 2010

Сделать пространство имен явным:

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.

...