Как использовать несколько встроенных утверждений во Фреге
Ради примеров самоконтроля я запустил следующий код:
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
)