Расширение существующего типа в OCaml

Я думаю, что это кажется, что это могло быть сделано с помощью пакеты SSIS . Они подобны пакетам DTS 2000-х SQL. Я использовал их для успешного преобразования всего из файлов CSV простого текста от существующих таблиц SQL, и даже из файлов XLS с 6-разрядными строками, заполненными через несколько рабочих листов. Вы могли использовать C# для преобразования данных в разрешенный к ввозу формат (CSV, XLS, и т.д.), затем иметь SQL-сервер, выполняет запланированное задание SSIS для импорта данных.

довольно легко создать пакет SSIS, существует созданный мастер - в инструмент Enterprise Manager SQL Server (маркировал "Import Data", я думаю), и в конце мастера это дает Вам опцию сохранения его как пакет SSIS. Существует набор больше информации на Technet также.

19
задан Don Stewart 18 April 2011 в 18:04
поделиться

3 ответа

Интересным решением является использование полиморфного варианта:

type bexp =
[ `And of bexp * bexp
| `Or of bexp * bexp
| `Xor of bexp * bexp
| `Not of bexp ];;

type nbexp = [ bexp | `Nop of nbexp ];;

Обратите внимание, что полиморфные варианты сложнее обычных, но допускают расширение типа.

Интересный пример вычисления выражения с расширением , используя полиморфный вариант, можно найти в тестовых каталогах исходного кода ocaml, см. svn

19
ответ дан 30 November 2019 в 04:07
поделиться

Эй, это должны быть алгебраические типы данных, верно?

Верно. А алгебраические типы данных состоят из помеченных (также называемых размеченными) объединений и произведений. Вам нужно просто (без тегов) объединение, которое не является алгебраическим типом данных и не поддерживается Haskell. OCaml имеет полиморфные варианты (см. Другие ответы).

Типизированная схема действительно поддерживает объединения без тегов, так что вы можете проверить ее.

4
ответ дан 30 November 2019 в 04:07
поделиться

Как вы сами правильно догадались, это невозможно в алгебраических типах. Я согласен с предложением Апокалиспа, что вы можете просто обернуть «унаследованную» часть nbexp в отдельный конструктор.

Я бы добавил, что отсутствие наследования алгебраических типов является частью их чудесности. Это означает, что такое выражение, как And (foo, bar) , типизировано неоднозначно, и что приведение типов (вверх или вниз) не играет никакой роли в системе типов. Это обеспечивает большую безопасность и большую ясность. Конечно, от программиста требуется, чтобы он / она явно обрабатывал случаи, когда он / она хочет взаимодействовать с частями bexp из nbexp , но если подумать, это как на практике реализуется повышенная безопасность и ясность.

4
ответ дан 30 November 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: