Мне было интересно, что действия ввода-вывода (например, println) будут возвращать значение типа void, и тогда мы сможем использовать эти действия в понимании списка или в качестве аргумента функции mapper.Однако, когда я пытаюсь
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)
Конечно, я не ожидал такого поведения, как отображение действия ввода-вывода в список в Haskell, хотя я не понимаю причину этого исключения нулевого указателя в Rascal.