2010-02-12 20 views
7

Acabo de instalar la última versión de F #, y abrí una solución antigua para ver qué me decía.F # 2.0 advertencia de espacio de nombres

Es una solución de múltiples archivos, donde el primer archivo incluye algunas 'funciones de extensión' en el módulo de lista:

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

El compilador ya no le gusta esto, y dice:

Archivos en bibliotecas o aplicaciones de archivos múltiples debe comenzar con un espacio de nombres o declaración de módulo, por ejemplo 'Espacio de nombres SomeNamespace.SubNamespace' o 'SomeNamespace.SomeModule módulo'

Pero si hago esto:

module Foo.List = 

Dice:

Un módulo abreviatura debe ser un nombre simple, no es una ruta

¿Qué es lo que me falta aquí? ¿Y cuál es la solución para este caso "especial" en el que extiendo un módulo que proviene de otro lugar?

Respuesta

6

Hacer el espacio de nombres explícito:

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

Tenga en cuenta que List.hd y List.tl han sido renombrados a List.head y List.tail.

+0

hd -> cabeza y tl -> cola? ¿Estas personas no se preocupan por el código de golf? :) – Benjol

+2

:) - Agréguelos ya que está agregando funciones al módulo de la Lista ... –

+3

La otra mitad de la respuesta, que es muy confusa, es que si no tiene espacio de nombres, y solo un módulo, no debe 't put an = after the module declaration. Pero si tiene un espacio de nombre, necesita un = – Benjol

Cuestiones relacionadas