如何在Frege中使用多个内联断言

时间:2013-09-13 16:22:55

标签: frege

为了自我检查的例子,我运行了以下代码:

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

当我只有一个断言时它起作用,所以类本身在CP上,模块导入原则上起作用。有什么问题?

1 个答案:

答案 0 :(得分:2)

您的assert函数会生成m ()表单的类型,其中mMonad。因此,“无所事事”的最佳方式就是

return ()

对于你问题的第二部分,我无法想象出错了什么。请安排你的github回购,以便我可以下载并亲自尝试。另外,给出您使用的编译命令和工作目录。

(顺便说一下,你应该使用一个可以显示Unicode的终端模拟器。 在Windows下,尝试chcp 65001