2015-12-27 14 views
4

Я только начал использовать расширение синтаксиса with sexp (описано here и here) в моих пользовательских типах. Тем не менее, я заметил, что когда я делаю, я получаю следующее предупреждение о моем типе:Использование 'with sexp' для типа генерирует «Предупреждение 4: это совпадение шаблонов является хрупким»

Warning 4: this pattern-matching is fragile. It will remain exhaustive when constructors are added to type Sexplib.Type.t.

Я предполагающей это потому, что Sexp преобразователи, которые создаются с помощью синтаксиса with sexp обрабатывать только конструкторы типов, определенные для Sexp (Sexp.List и Sexp.Atom).

Обычно я пытаюсь исправить любые предупреждения в моей компиляции; есть ли способ сделать компилятор счастливым здесь (за исключением того, что он полностью подавляет предупреждение для всех случаев)?

EDIT: для форматирования уценок.

Обновление: Предоставление примерного кода от hit.ml.

open Core.Std 
open Option.Monad_infix 

open Battey.Kernel 

type hit = (sentence * int) with sexp 

Формирует это предупреждение:

File "hit.ml", line 6, characters 5-27: Warning 4: this pattern-matching is fragile. It will remain exhaustive when constructors are added to type Sexplib.Type.t.

Дополнительная информация: Я использую версию 4.02.3 из ocamlc (в установленной через opam) на MacBook (Yosemite), и я использую версию 113.00 .00 от core и core_kernel. Я также использую -w A для своих флагов.

Извинения за задержку в обновлении; праздники держали меня подальше от моего ноутбука/интернет-соединения.

Благодарим вас за отзыв!

+1

не могли бы вы предоставить свой код? (или просто подмножество, которое проявляет это поведение) –

+0

Вы открыли 'Core.Std'? – ivg

+0

@ivg yep, я открываю 'Core.Std'. Я добавил фрагмент кода. – user812376

ответ

0

Я считаю, что это вызвано, используя нечто вроде

match t with 
| A -> 0 
| B -> 1 
| _ -> 2 

Это выглядит хорошо, если type t = A | B | C. Но когда добавляется конструктор D, он будет просто соответствовать ему, и обычно это не то, что вы хотите. Не похоже, что есть что-то, что вы можете сделать, но проигнорируйте предупреждение.