为了自我检查的例子,我运行了以下代码:
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上,模块导入原则上起作用。有什么问题?
答案 0 :(得分:2)
您的assert
函数会生成m ()
表单的类型,其中m
为Monad
。因此,“无所事事”的最佳方式就是
return ()
对于你问题的第二部分,我无法想象出错了什么。请安排你的github回购,以便我可以下载并亲自尝试。另外,给出您使用的编译命令和工作目录。
(顺便说一下,你应该使用一个可以显示Unicode的终端模拟器。
在Windows下,尝试chcp 65001
)