Как установить и использовать F # Powerpack в Mono?

Мне нужно установить использование F # powerpack. Я использую моно версию 2.10.2 на Mac.

mono --version
Mono JIT compiler version 2.10.2 (tarball Mon Apr 18 09:14:01 MDT 2011)
Copyright (C) 2002-2011 Novell, Inc and Contributors. www.mono-project.com
        TLS:           normal
        SIGSEGV:       normal
        Notification:  kqueue
        Architecture:  x86
        Disabled:      none
        Misc:          debugger softdebug 
        LLVM:          yes(2.9svn-mono)
        GC:            Included Boehm (with typed GC)

Установка.

  1. Загрузите zip-файл powerpack с здесь.

  2. Разархивируйте файл в каталог ~/bin.

  3. Добавьте ~/bin/FSharpPowerPack-1.9.9.9/bin в ПУТЬ. Еще на всякий случай добавляю в MONO_PATH. (Не уверен, нужно это или нет)
  4. Для библиотек в ~/bin/FSharpPowerPack-1.9.9.9/bin/gac используйте команду sudo gacutil -i <ALL_THE_FILES_IN_DLL>.dll

Использование блока питания

Я тестировал образец кода на этой странице. Я называю это linq.fs

open Microsoft.FSharp.Linq
let adderExpr = <@ fun i -> i + 1 @>.ToLinqExpression()
let adder = <@ fun i -> i + 1 @>.Compile()

Вопросы

  1. У меня ошибки с fsc linq.fs /r:FSharp.PowerPack.Linq.dll. Что может быть не так?

    /Users/smcho/Desktop/fs/powerpack/linq.fs(1,38): ошибка FS0039: поле, конструктор или член ToLinqExpression не определены

    /Users/smcho/Desktop/fs/powerpack/linq.fs(2,34): ошибка FS0039: поле, конструктор или член Compile не определены

  2. Нужно ли мне устанавливать все dll с gacutil -i? Или достаточно просто добавить путь dll к переменной окружения PATH / MONO_PATH?


person prosseek    schedule 01.06.2011    source источник
comment
Вы упустили одну из самых важных деталей - какую версию Mono?   -  person ildjarn    schedule 01.06.2011
comment
@ildjarn: Я добавил информацию. Спасибо.   -  person prosseek    schedule 01.06.2011
comment
Ваш тестовый код open Microsoft.FSharp.Linq?   -  person Joel Mueller    schedule 01.06.2011
comment
@ Джоэль Мюллер: Да, это так, я добавил это в OP.   -  person prosseek    schedule 01.06.2011


Ответы (1)


Ваша процедура установки кажется правильной (просто разархивируйте и установите с помощью gacutil -i). Я думаю, что с образцом есть небольшая проблема - метод расширения ToLinqExpression доступен в модуле, который необходимо явно открыть, поэтому ваш файл должен быть:

ИЗМЕНИТЬ Правильное имя модуля на самом деле Microsoft.FSharp.Linq.QuotationEvaluation:

open Microsoft.FSharp.Linq.QuotationEvaluation

let adderExpr = <@ fun i -> i + 1 @>.ToLinqExpression()
let adder = <@ fun i -> i + 1 @>.Compile()
person Tomas Petricek    schedule 01.06.2011
comment
Я тоже недавно наткнулся на это. Это было изменено в версии 2.0? - person Daniel; 01.06.2011
comment
Я получил /Users/smcho/Desktop/fs/powerpack/linq.fs(1,28): error FS0039: The namespace 'QuotationEvaluator' is not defined вместе с исходным сообщением об ошибке. Я не уверен, что мне нужно было запускать gacuitl -i для библиотек, не находящихся в каталоге gac. - person prosseek; 02.06.2011
comment
@prosseek - Извините, я неправильно назвал модуль (должно быть QuotationEvaluation! Добавление файлов в GAC не является строго необходимым, вы можете просто указать на них полный путь, и они скопируют их в место вывода (в тот же каталог, что и ваше приложение) . - person Tomas Petricek; 02.06.2011
comment
@ Дэниел - я точно не знаю, но я также думаю, что это должно быть изменилось. Эта функция немного ограничена, поэтому я предполагаю, что команда F # не хочет чрезмерно подчеркивать ее ... - person Tomas Petricek; 02.06.2011
comment
Спасибо, это работает. BWT, у меня возникла некоторая ошибка, связанная с ссылками на dll, поэтому я задал еще один вопрос по адресу stackoverflow.com/questions/6207270/ - person prosseek; 02.06.2011