Требовать, чтобы указанный в коде c Haskell тип был недопустимым - PullRequest
1 голос
/ 09 мая 2020

Можно ли указать компилятору GH C требовать, чтобы указанное значение c в коде имело недопустимый тип, без использования этого значения?

Надуманный пример:

data Box a = Num a => Box a

goodBoxSample :: Box Int
goodBoxSample = Box 1

-- below definition and binding are expected to fail compilation
badBoxSample :: Box String
badBoxSample = Box "foo"

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

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

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Кто-то опубликовал здесь очень полезный ответ, но прежде, чем я успел принять его, он был удален ... Все равно спасибо, и вот он для справки:

https://hackage.haskell.org/package/generic-lens-2.0.0.0/docs/Data-Generics-Product-Fields.html

Короче говоря, цель тестирования типов с ошибкой может быть достигнута с помощью doctest , как это делает связанная библиотека.

0 голосов
/ 09 мая 2020

Невозможно. По сути, вы просите способ доказать, что instance Num String не существует, но Haskell работает в предположении открытого мира, что означает, что кто-то всегда может объявить такой экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...