我想知道的是IO操作(如的println)将返回void类型的值,那么我们就可以在列表理解或作为参数传递给函数映射器使用这些操作。然而,当我尝试
rascal> import IO;
rascal> import List;
rascal> [println(x) | x <- [1,2,3]];
我得到一个空指针异常(以下堆栈跟踪的一部分)。同样的,当我尝试发生
rascal> mapper([1,2,3], println);
1
java.lang.NullPointerException(internal error) at $root$(|main://$root$|)
java.lang.NullPointerException
at io.usethesource.vallang.impl.fast.ListWriter.updateType(ListWriter.java:76)
at io.usethesource.vallang.impl.fast.ListWriter.append(ListWriter.java:84)
at org.rascalmpl.semantics.dynamic.ListComprehensionWriter.append(ListComprehensionWriter.java:38)
当然,我是不是真的像预期的映射IO动作到在Haskell名单,但我不明白,在这个捣蛋鬼空指针异常原因的行为。