Как использовать несколько встроенных утверждений во Фреге

Ради примеров самоконтроля я запустил следующий код:

assert :: Bool -> Bool -> String -> IO ()
assert actual expected description
    | expected == actual     = do { print "" }   -- need a better way to do nothing
    | otherwise              = error description

main _ = do
    assert (odd 2) false "2 is not odd"
    assert (odd 3) true  "3 is odd"

Я знаю, что это не идеально (и совет более чем приветствуется), но текущая проблема заключается в том, что, когда я помещаю определение assert в модуль util.Assertions, то использование двух утверждений не компилируется с

build/realworld/chapter2/FunctionApplication.java:168: error: cannot access ?
              Assertions.?._assert?.apply(
                        ^
class file for util.Assertions$? not found
1 error
E .../Real_World_Frege/chapter2/FunctionApplication.fr:24: java compiler errors are most likely caused by erronous
native definitions

Это работает, когда у меня есть только одно утверждение, поэтому сам класс находится на СР, и импорт модуля работает в принципе. Что случилось?

1 ответ

Решение

Ваш assert функция приводит к виду формы m () где m это Monad, Поэтому лучший способ "ничего не делать" - это просто

return ()

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

(Кстати, вы должны использовать эмулятор терминала, который может отображать Unicode. В Windows попробуйте chcp 65001)

Другие вопросы по тегам