titaniumdecoy
, я помню, помог с этим видом GHCi тайны, когда я узнал, часто сделал дело, что писать такие вещи, как «пусть квадрат х = х * х» внутри 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)
Никто не объявить тип данных в середине такой последовательности, но будет делать это в другом месте в модуле. Возможно, я догадался, что есть какое-то теоретическое возражение, но замечание Дон С. предполагает, что его нет.
Возможный дубликат [Можно определить новые ADT в GHCi] (http://stackoverflow.com/questions/3849716/is-it-possible-to-define-new-adts-in-ghci) – newacct
@ newacct: Я задал этот вопрос до того, как был задан вопрос, на который вы ссылались. – titaniumdecoy
Как говорит Алексей Романов, вы можете в ghc 7.4.1 и выше. – Davorak