Почему я не могу определить новый тип в GHCI?
Вопрос
Я получаю ошибку в GHCI, когда пытаюсь определить новый тип:
Prelude> Точка данных = PT INT INTu003Cinteractive> : 1: 0: ошибка анализа на входных данных `Data 'Prelude> Пусть точка данных = pt int intu003Cinteractive> : 1: 4: ошибка разбора на входных данных «данные»
Что я делаю неправильно?
Решение
titaniumdecoy
, Я помню, как быть помогли с такого рода тайной GHCI, когда я узнал часто сделал точку, что пишут такие вещи, как «пусть квадрат x = x * x» внутри GHCI, как написание let a = f b
с участием do
Обозначение в IO
Монад - скажи в таком примере:
palindromize :: IO ()
palindromize = do
a <- readFile "foo.txt"
let b = reverse a
putStrLn (a ++ b)
Точно так же, когда вы переопределите выражение в GHCI, это как можно сделать следующее в do
Обозначение, которое совершенно законно:
makeMess :: IO ()
makeMess = do
a <- readFile "foo.txt"
let b = reverse a
putStrLn (a ++ b)
let b = a
putStrLn (a ++ b)
Никто бы мог бы объявить тип данных В середине такой последовательности, но сделали бы это в других местах модуля. Я мог бы догадаться, что было какое-то теоретическое возражение, но замечание Дон С. предполагает, что нет ни одного.
Другие советы
Только для исторической справки, HBI Haskell Интерактивная среда Позволяет полный Haskell в командной строке, включая типы, классы и так далее. Нет никаких априори GHCI не может работать аналогично, и пользователи могли бы написать интерфейс для GHC-API, который поддерживал это ...
GHCI не позволяет вам определять типы от интерактивного ввода - вместо этого вам нужно поставить определение вашего типа в файл и :load
файл в ghci.