Ответ 1
titaniumdecoy
, я помню, что мне помогали с такой загадкой GHCi, когда я узнал часто заданную точку, в которой такие вещи, как "let square 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)
Никто не объявит тип данных в середине такой последовательности, но сделает это в другом месте модуля. Возможно, я догадался, что есть какие-то теоретические возражения, но замечание Дон С. предполагает, что их нет.