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)
Никто не будет объявлять тип данных в середине такой последовательности, но сделает это в другом месте в модуле. Я мог бы догадаться, что было какое-то теоретическое возражение, но замечание дона С. предполагает, что его нет.