Инструмент native-gen генерирует собственное объявление для метода showOpenDialog
в javafx.stage.FileChooser
вот так
data FileChooser = mutable native javafx.stage.FileChooser where
native showOpenDialog :: FileChooser -> Window -> IO File
Компиляция приводит к сообщению
Non pure native type File must be MutableIO
File in IO actions.
Теперь настройка
native showOpenDialog :: FileChooser -> Window -> MutableIO File
приводит к
FileChooser.showOpenDialog has an illegal
return type for a method that is not pure, perhaps ST s (MutableIO
File) would work
но следование совету снова приводит к первому сообщению об ошибке.
Компилятор принимает IOMutable File
в качестве возвращаемого типа, что имеет смысл, поскольку это действие ввода-вывода, которое возвращает изменяемый тип.
Если возможно, сообщение об ошибке компилятора должно быть адаптировано, чтобы избежать разочарования со стороны пользователя.
Однако в этой особой ситуации файл может быть пустым, поэтому тип ядра будет не File
, а Maybe File
. Но тогда просто использование IOMutable (Maybe File)
приводит к довольно неожиданному сообщению
The type MutableIO (Maybe File) is illegal,
Maybe File must be a native type.
Любые советы о том, как правильно объявить этот тип?
File
наMutableIO File
. К сожалению, разрыв строки оказывается в неудачном положении. Во всяком случае, в сообщении не говорилось удалитьIO
! - person Ingo   schedule 20.08.2015