У меня есть эта функция:'попытка' может решить, когда программа останавливается
isUndefined ::() -> Bool
isUndefined x = case unsafePerformIO $ (try (return $! x) :: IO (Either SomeException())) of
Left _ -> True
Right _ -> False
затем:
isUndefined() = False
isUndefined undefined = True
Решение Остановки проблемы. Конечно, это можно распространить и на другие типы.
Мой вопрос: как это возможно? Is Control.Exception.try
действительно разрушает вещи здесь?
Программа может вводить бесконечный цикл, не возвращая ни '()', ни 'undefined'. Тогда ваша функция isUndefined также вводит бесконечный цикл, не давая никакого значимого результата, поэтому он не отвечает на проблему с остановкой. Помните, что проблема с остановкой получает в качестве входных данных программу (функцию, машину Тьюринга, процедуру, что угодно), а не данные. – Mephy
Вы имеете в виду, что решаете проблему остановки, запустив программу и дождавшись ее остановки? – mb14