-- Test for ticket #830, simplifier taking too long on large do expression

main = do
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()
  return ()


module Out where
import Control.Monad (forever)
a1 :: IO (); a1 = forever $ putStrLn "a1"
a2 :: IO (); a2 = forever $ putStrLn "a2"
a3 :: IO (); a3 = forever $ putStrLn "a3"
a4 :: IO (); a4 = forever $ putStrLn "a4"
a5 :: IO (); a5 = forever $ putStrLn "a5"
a6 :: IO (); a6 = forever $ putStrLn "a6"
a7 :: IO (); a7 = forever $ putStrLn "a7"
a8 :: IO (); a8 = forever $ putStrLn "a8"
a9 :: IO (); a9 = forever $ putStrLn "a9"
a10 :: IO (); a10 = forever $ putStrLn "a10"
a11 :: IO (); a11 = forever $ putStrLn "a11"
a12 :: IO (); a12 = forever $ putStrLn "a12"
a13 :: IO (); a13 = forever $ putStrLn "a13"
a14 :: IO (); a14 = forever $ putStrLn "a14"
a15 :: IO (); a15 = forever $ putStrLn "a15"
a16 :: IO (); a16 = forever $ putStrLn "a16"
a17 :: IO (); a17 = forever $ putStrLn "a17"
a18 :: IO (); a18 = forever $ putStrLn "a18"
a19 :: IO (); a19 = forever $ putStrLn "a19"
a20 :: IO (); a20 = forever $ putStrLn "a20"
a21 :: IO (); a21 = forever $ putStrLn "a21"
a22 :: IO (); a22 = forever $ putStrLn "a22"
a23 :: IO (); a23 = forever $ putStrLn "a23"
a24 :: IO (); a24 = forever $ putStrLn "a24"
a25 :: IO (); a25 = forever $ putStrLn "a25"
a26 :: IO (); a26 = forever $ putStrLn "a26"
a27 :: IO (); a27 = forever $ putStrLn "a27"
a28 :: IO (); a28 = forever $ putStrLn "a28"
a29 :: IO (); a29 = forever $ putStrLn "a29"
a30 :: IO (); a30 = forever $ putStrLn "a30"
a31 :: IO (); a31 = forever $ putStrLn "a31"
a32 :: IO (); a32 = forever $ putStrLn "a32"
a33 :: IO (); a33 = forever $ putStrLn "a33"
a34 :: IO (); a34 = forever $ putStrLn "a34"
a35 :: IO (); a35 = forever $ putStrLn "a35"
a36 :: IO (); a36 = forever $ putStrLn "a36"
a37 :: IO (); a37 = forever $ putStrLn "a37"
a38 :: IO (); a38 = forever $ putStrLn "a38"
a39 :: IO (); a39 = forever $ putStrLn "a39"
a40 :: IO (); a40 = forever $ putStrLn "a40"
a41 :: IO (); a41 = forever $ putStrLn "a41"
a42 :: IO (); a42 = forever $ putStrLn "a42"
a43 :: IO (); a43 = forever $ putStrLn "a43"
a44 :: IO (); a44 = forever $ putStrLn "a44"
a45 :: IO (); a45 = forever $ putStrLn "a45"
a46 :: IO (); a46 = forever $ putStrLn "a46"
a47 :: IO (); a47 = forever $ putStrLn "a47"
a48 :: IO (); a48 = forever $ putStrLn "a48"
a49 :: IO (); a49 = forever $ putStrLn "a49"
a50 :: IO (); a50 = forever $ putStrLn "a50"
a51 :: IO (); a51 = forever $ putStrLn "a51"
a52 :: IO (); a52 = forever $ putStrLn "a52"
a53 :: IO (); a53 = forever $ putStrLn "a53"
a54 :: IO (); a54 = forever $ putStrLn "a54"
a55 :: IO (); a55 = forever $ putStrLn "a55"
a56 :: IO (); a56 = forever $ putStrLn "a56"
a57 :: IO (); a57 = forever $ putStrLn "a57"
a58 :: IO (); a58 = forever $ putStrLn "a58"
a59 :: IO (); a59 = forever $ putStrLn "a59"
a60 :: IO (); a60 = forever $ putStrLn "a60"
a61 :: IO (); a61 = forever $ putStrLn "a61"
a62 :: IO (); a62 = forever $ putStrLn "a62"
a63 :: IO (); a63 = forever $ putStrLn "a63"
a64 :: IO (); a64 = forever $ putStrLn "a64"
a65 :: IO (); a65 = forever $ putStrLn "a65"
a66 :: IO (); a66 = forever $ putStrLn "a66"
a67 :: IO (); a67 = forever $ putStrLn "a67"
a68 :: IO (); a68 = forever $ putStrLn "a68"
a69 :: IO (); a69 = forever $ putStrLn "a69"
a70 :: IO (); a70 = forever $ putStrLn "a70"
a71 :: IO (); a71 = forever $ putStrLn "a71"
a72 :: IO (); a72 = forever $ putStrLn "a72"
a73 :: IO (); a73 = forever $ putStrLn "a73"
a74 :: IO (); a74 = forever $ putStrLn "a74"
a75 :: IO (); a75 = forever $ putStrLn "a75"
a76 :: IO (); a76 = forever $ putStrLn "a76"
a77 :: IO (); a77 = forever $ putStrLn "a77"
a78 :: IO (); a78 = forever $ putStrLn "a78"
a79 :: IO (); a79 = forever $ putStrLn "a79"
a80 :: IO (); a80 = forever $ putStrLn "a80"
a81 :: IO (); a81 = forever $ putStrLn "a81"
a82 :: IO (); a82 = forever $ putStrLn "a82"
a83 :: IO (); a83 = forever $ putStrLn "a83"
a84 :: IO (); a84 = forever $ putStrLn "a84"
a85 :: IO (); a85 = forever $ putStrLn "a85"
a86 :: IO (); a86 = forever $ putStrLn "a86"
a87 :: IO (); a87 = forever $ putStrLn "a87"
a88 :: IO (); a88 = forever $ putStrLn "a88"
a89 :: IO (); a89 = forever $ putStrLn "a89"
a90 :: IO (); a90 = forever $ putStrLn "a90"
a91 :: IO (); a91 = forever $ putStrLn "a91"
a92 :: IO (); a92 = forever $ putStrLn "a92"
a93 :: IO (); a93 = forever $ putStrLn "a93"
a94 :: IO (); a94 = forever $ putStrLn "a94"
a95 :: IO (); a95 = forever $ putStrLn "a95"
a96 :: IO (); a96 = forever $ putStrLn "a96"
a97 :: IO (); a97 = forever $ putStrLn "a97"
a98 :: IO (); a98 = forever $ putStrLn "a98"
a99 :: IO (); a99 = forever $ putStrLn "a99"
a100 :: IO (); a100 = forever $ putStrLn "a100"
a101 :: IO (); a101 = forever $ putStrLn "a101"
a102 :: IO (); a102 = forever $ putStrLn "a102"
a103 :: IO (); a103 = forever $ putStrLn "a103"
a104 :: IO (); a104 = forever $ putStrLn "a104"
a105 :: IO (); a105 = forever $ putStrLn "a105"
a106 :: IO (); a106 = forever $ putStrLn "a106"
a107 :: IO (); a107 = forever $ putStrLn "a107"
a108 :: IO (); a108 = forever $ putStrLn "a108"
a109 :: IO (); a109 = forever $ putStrLn "a109"
a110 :: IO (); a110 = forever $ putStrLn "a110"
a111 :: IO (); a111 = forever $ putStrLn "a111"
a112 :: IO (); a112 = forever $ putStrLn "a112"
a113 :: IO (); a113 = forever $ putStrLn "a113"
a114 :: IO (); a114 = forever $ putStrLn "a114"
a115 :: IO (); a115 = forever $ putStrLn "a115"
a116 :: IO (); a116 = forever $ putStrLn "a116"
a117 :: IO (); a117 = forever $ putStrLn "a117"
a118 :: IO (); a118 = forever $ putStrLn "a118"
a119 :: IO (); a119 = forever $ putStrLn "a119"
a120 :: IO (); a120 = forever $ putStrLn "a120"
a121 :: IO (); a121 = forever $ putStrLn "a121"
a122 :: IO (); a122 = forever $ putStrLn "a122"
a123 :: IO (); a123 = forever $ putStrLn "a123"
a124 :: IO (); a124 = forever $ putStrLn "a124"
a125 :: IO (); a125 = forever $ putStrLn "a125"
a126 :: IO (); a126 = forever $ putStrLn "a126"
a127 :: IO (); a127 = forever $ putStrLn "a127"
a128 :: IO (); a128 = forever $ putStrLn "a128"
a129 :: IO (); a129 = forever $ putStrLn "a129"
a130 :: IO (); a130 = forever $ putStrLn "a130"
a131 :: IO (); a131 = forever $ putStrLn "a131"
a132 :: IO (); a132 = forever $ putStrLn "a132"
a133 :: IO (); a133 = forever $ putStrLn "a133"
a134 :: IO (); a134 = forever $ putStrLn "a134"
a135 :: IO (); a135 = forever $ putStrLn "a135"
a136 :: IO (); a136 = forever $ putStrLn "a136"
a137 :: IO (); a137 = forever $ putStrLn "a137"
a138 :: IO (); a138 = forever $ putStrLn "a138"
a139 :: IO (); a139 = forever $ putStrLn "a139"
a140 :: IO (); a140 = forever $ putStrLn "a140"
a141 :: IO (); a141 = forever $ putStrLn "a141"
a142 :: IO (); a142 = forever $ putStrLn "a142"
a143 :: IO (); a143 = forever $ putStrLn "a143"
a144 :: IO (); a144 = forever $ putStrLn "a144"
a145 :: IO (); a145 = forever $ putStrLn "a145"
a146 :: IO (); a146 = forever $ putStrLn "a146"
a147 :: IO (); a147 = forever $ putStrLn "a147"
a148 :: IO (); a148 = forever $ putStrLn "a148"
a149 :: IO (); a149 = forever $ putStrLn "a149"
a150 :: IO (); a150 = forever $ putStrLn "a150"
a151 :: IO (); a151 = forever $ putStrLn "a151"
a152 :: IO (); a152 = forever $ putStrLn "a152"
a153 :: IO (); a153 = forever $ putStrLn "a153"
a154 :: IO (); a154 = forever $ putStrLn "a154"
a155 :: IO (); a155 = forever $ putStrLn "a155"
a156 :: IO (); a156 = forever $ putStrLn "a156"
a157 :: IO (); a157 = forever $ putStrLn "a157"
a158 :: IO (); a158 = forever $ putStrLn "a158"
a159 :: IO (); a159 = forever $ putStrLn "a159"
a160 :: IO (); a160 = forever $ putStrLn "a160"
a161 :: IO (); a161 = forever $ putStrLn "a161"
a162 :: IO (); a162 = forever $ putStrLn "a162"
a163 :: IO (); a163 = forever $ putStrLn "a163"
a164 :: IO (); a164 = forever $ putStrLn "a164"
a165 :: IO (); a165 = forever $ putStrLn "a165"
a166 :: IO (); a166 = forever $ putStrLn "a166"
a167 :: IO (); a167 = forever $ putStrLn "a167"
a168 :: IO (); a168 = forever $ putStrLn "a168"
a169 :: IO (); a169 = forever $ putStrLn "a169"
a170 :: IO (); a170 = forever $ putStrLn "a170"
a171 :: IO (); a171 = forever $ putStrLn "a171"
a172 :: IO (); a172 = forever $ putStrLn "a172"
a173 :: IO (); a173 = forever $ putStrLn "a173"
a174 :: IO (); a174 = forever $ putStrLn "a174"
a175 :: IO (); a175 = forever $ putStrLn "a175"
a176 :: IO (); a176 = forever $ putStrLn "a176"
a177 :: IO (); a177 = forever $ putStrLn "a177"
a178 :: IO (); a178 = forever $ putStrLn "a178"
a179 :: IO (); a179 = forever $ putStrLn "a179"
a180 :: IO (); a180 = forever $ putStrLn "a180"
a181 :: IO (); a181 = forever $ putStrLn "a181"
a182 :: IO (); a182 = forever $ putStrLn "a182"
a183 :: IO (); a183 = forever $ putStrLn "a183"
a184 :: IO (); a184 = forever $ putStrLn "a184"
a185 :: IO (); a185 = forever $ putStrLn "a185"
a186 :: IO (); a186 = forever $ putStrLn "a186"
a187 :: IO (); a187 = forever $ putStrLn "a187"
a188 :: IO (); a188 = forever $ putStrLn "a188"
a189 :: IO (); a189 = forever $ putStrLn "a189"
a190 :: IO (); a190 = forever $ putStrLn "a190"
a191 :: IO (); a191 = forever $ putStrLn "a191"
a192 :: IO (); a192 = forever $ putStrLn "a192"
a193 :: IO (); a193 = forever $ putStrLn "a193"
a194 :: IO (); a194 = forever $ putStrLn "a194"
a195 :: IO (); a195 = forever $ putStrLn "a195"
a196 :: IO (); a196 = forever $ putStrLn "a196"
a197 :: IO (); a197 = forever $ putStrLn "a197"
a198 :: IO (); a198 = forever $ putStrLn "a198"
a199 :: IO (); a199 = forever $ putStrLn "a199"
a200 :: IO (); a200 = forever $ putStrLn "a200"
a201 :: IO (); a201 = forever $ putStrLn "a201"
a202 :: IO (); a202 = forever $ putStrLn "a202"
a203 :: IO (); a203 = forever $ putStrLn "a203"
a204 :: IO (); a204 = forever $ putStrLn "a204"
a205 :: IO (); a205 = forever $ putStrLn "a205"
a206 :: IO (); a206 = forever $ putStrLn "a206"
a207 :: IO (); a207 = forever $ putStrLn "a207"
a208 :: IO (); a208 = forever $ putStrLn "a208"
a209 :: IO (); a209 = forever $ putStrLn "a209"
a210 :: IO (); a210 = forever $ putStrLn "a210"
a211 :: IO (); a211 = forever $ putStrLn "a211"
a212 :: IO (); a212 = forever $ putStrLn "a212"
a213 :: IO (); a213 = forever $ putStrLn "a213"
a214 :: IO (); a214 = forever $ putStrLn "a214"
a215 :: IO (); a215 = forever $ putStrLn "a215"
a216 :: IO (); a216 = forever $ putStrLn "a216"
a217 :: IO (); a217 = forever $ putStrLn "a217"
a218 :: IO (); a218 = forever $ putStrLn "a218"
a219 :: IO (); a219 = forever $ putStrLn "a219"
a220 :: IO (); a220 = forever $ putStrLn "a220"
a221 :: IO (); a221 = forever $ putStrLn "a221"
a222 :: IO (); a222 = forever $ putStrLn "a222"
a223 :: IO (); a223 = forever $ putStrLn "a223"
a224 :: IO (); a224 = forever $ putStrLn "a224"
a225 :: IO (); a225 = forever $ putStrLn "a225"
a226 :: IO (); a226 = forever $ putStrLn "a226"
a227 :: IO (); a227 = forever $ putStrLn "a227"
a228 :: IO (); a228 = forever $ putStrLn "a228"
a229 :: IO (); a229 = forever $ putStrLn "a229"
a230 :: IO (); a230 = forever $ putStrLn "a230"
a231 :: IO (); a231 = forever $ putStrLn "a231"
a232 :: IO (); a232 = forever $ putStrLn "a232"
a233 :: IO (); a233 = forever $ putStrLn "a233"
a234 :: IO (); a234 = forever $ putStrLn "a234"
a235 :: IO (); a235 = forever $ putStrLn "a235"
a236 :: IO (); a236 = forever $ putStrLn "a236"
a237 :: IO (); a237 = forever $ putStrLn "a237"
a238 :: IO (); a238 = forever $ putStrLn "a238"
a239 :: IO (); a239 = forever $ putStrLn "a239"
a240 :: IO (); a240 = forever $ putStrLn "a240"
a241 :: IO (); a241 = forever $ putStrLn "a241"
a242 :: IO (); a242 = forever $ putStrLn "a242"
a243 :: IO (); a243 = forever $ putStrLn "a243"
a244 :: IO (); a244 = forever $ putStrLn "a244"
a245 :: IO (); a245 = forever $ putStrLn "a245"
a246 :: IO (); a246 = forever $ putStrLn "a246"
a247 :: IO (); a247 = forever $ putStrLn "a247"
a248 :: IO (); a248 = forever $ putStrLn "a248"
a249 :: IO (); a249 = forever $ putStrLn "a249"
a250 :: IO (); a250 = forever $ putStrLn "a250"
a251 :: IO (); a251 = forever $ putStrLn "a251"
a252 :: IO (); a252 = forever $ putStrLn "a252"
a253 :: IO (); a253 = forever $ putStrLn "a253"
a254 :: IO (); a254 = forever $ putStrLn "a254"
a255 :: IO (); a255 = forever $ putStrLn "a255"
a256 :: IO (); a256 = forever $ putStrLn "a256"
a257 :: IO (); a257 = forever $ putStrLn "a257"
a258 :: IO (); a258 = forever $ putStrLn "a258"
a259 :: IO (); a259 = forever $ putStrLn "a259"
a260 :: IO (); a260 = forever $ putStrLn "a260"
a261 :: IO (); a261 = forever $ putStrLn "a261"
a262 :: IO (); a262 = forever $ putStrLn "a262"
a263 :: IO (); a263 = forever $ putStrLn "a263"
a264 :: IO (); a264 = forever $ putStrLn "a264"
a265 :: IO (); a265 = forever $ putStrLn "a265"
a266 :: IO (); a266 = forever $ putStrLn "a266"
a267 :: IO (); a267 = forever $ putStrLn "a267"
a268 :: IO (); a268 = forever $ putStrLn "a268"
a269 :: IO (); a269 = forever $ putStrLn "a269"
a270 :: IO (); a270 = forever $ putStrLn "a270"
a271 :: IO (); a271 = forever $ putStrLn "a271"
a272 :: IO (); a272 = forever $ putStrLn "a272"
a273 :: IO (); a273 = forever $ putStrLn "a273"
a274 :: IO (); a274 = forever $ putStrLn "a274"
a275 :: IO (); a275 = forever $ putStrLn "a275"
a276 :: IO (); a276 = forever $ putStrLn "a276"
a277 :: IO (); a277 = forever $ putStrLn "a277"
a278 :: IO (); a278 = forever $ putStrLn "a278"
a279 :: IO (); a279 = forever $ putStrLn "a279"
a280 :: IO (); a280 = forever $ putStrLn "a280"
a281 :: IO (); a281 = forever $ putStrLn "a281"
a282 :: IO (); a282 = forever $ putStrLn "a282"
a283 :: IO (); a283 = forever $ putStrLn "a283"
a284 :: IO (); a284 = forever $ putStrLn "a284"
a285 :: IO (); a285 = forever $ putStrLn "a285"
a286 :: IO (); a286 = forever $ putStrLn "a286"
a287 :: IO (); a287 = forever $ putStrLn "a287"
a288 :: IO (); a288 = forever $ putStrLn "a288"
a289 :: IO (); a289 = forever $ putStrLn "a289"
a290 :: IO (); a290 = forever $ putStrLn "a290"
a291 :: IO (); a291 = forever $ putStrLn "a291"
a292 :: IO (); a292 = forever $ putStrLn "a292"
a293 :: IO (); a293 = forever $ putStrLn "a293"
a294 :: IO (); a294 = forever $ putStrLn "a294"
a295 :: IO (); a295 = forever $ putStrLn "a295"
a296 :: IO (); a296 = forever $ putStrLn "a296"
a297 :: IO (); a297 = forever $ putStrLn "a297"
a298 :: IO (); a298 = forever $ putStrLn "a298"
a299 :: IO (); a299 = forever $ putStrLn "a299"
a300 :: IO (); a300 = forever $ putStrLn "a300"
a301 :: IO (); a301 = forever $ putStrLn "a301"
a302 :: IO (); a302 = forever $ putStrLn "a302"
a303 :: IO (); a303 = forever $ putStrLn "a303"
a304 :: IO (); a304 = forever $ putStrLn "a304"
a305 :: IO (); a305 = forever $ putStrLn "a305"
a306 :: IO (); a306 = forever $ putStrLn "a306"
a307 :: IO (); a307 = forever $ putStrLn "a307"
a308 :: IO (); a308 = forever $ putStrLn "a308"
a309 :: IO (); a309 = forever $ putStrLn "a309"
a310 :: IO (); a310 = forever $ putStrLn "a310"
a311 :: IO (); a311 = forever $ putStrLn "a311"
a312 :: IO (); a312 = forever $ putStrLn "a312"
a313 :: IO (); a313 = forever $ putStrLn "a313"
a314 :: IO (); a314 = forever $ putStrLn "a314"
a315 :: IO (); a315 = forever $ putStrLn "a315"
a316 :: IO (); a316 = forever $ putStrLn "a316"
a317 :: IO (); a317 = forever $ putStrLn "a317"
a318 :: IO (); a318 = forever $ putStrLn "a318"
a319 :: IO (); a319 = forever $ putStrLn "a319"
a320 :: IO (); a320 = forever $ putStrLn "a320"
a321 :: IO (); a321 = forever $ putStrLn "a321"
a322 :: IO (); a322 = forever $ putStrLn "a322"
a323 :: IO (); a323 = forever $ putStrLn "a323"
a324 :: IO (); a324 = forever $ putStrLn "a324"
a325 :: IO (); a325 = forever $ putStrLn "a325"
a326 :: IO (); a326 = forever $ putStrLn "a326"
a327 :: IO (); a327 = forever $ putStrLn "a327"
a328 :: IO (); a328 = forever $ putStrLn "a328"
a329 :: IO (); a329 = forever $ putStrLn "a329"
a330 :: IO (); a330 = forever $ putStrLn "a330"
a331 :: IO (); a331 = forever $ putStrLn "a331"
a332 :: IO (); a332 = forever $ putStrLn "a332"
a333 :: IO (); a333 = forever $ putStrLn "a333"
a334 :: IO (); a334 = forever $ putStrLn "a334"
a335 :: IO (); a335 = forever $ putStrLn "a335"
a336 :: IO (); a336 = forever $ putStrLn "a336"
a337 :: IO (); a337 = forever $ putStrLn "a337"
a338 :: IO (); a338 = forever $ putStrLn "a338"
a339 :: IO (); a339 = forever $ putStrLn "a339"
a340 :: IO (); a340 = forever $ putStrLn "a340"
a341 :: IO (); a341 = forever $ putStrLn "a341"
a342 :: IO (); a342 = forever $ putStrLn "a342"
a343 :: IO (); a343 = forever $ putStrLn "a343"
a344 :: IO (); a344 = forever $ putStrLn "a344"
a345 :: IO (); a345 = forever $ putStrLn "a345"
a346 :: IO (); a346 = forever $ putStrLn "a346"
a347 :: IO (); a347 = forever $ putStrLn "a347"
a348 :: IO (); a348 = forever $ putStrLn "a348"
a349 :: IO (); a349 = forever $ putStrLn "a349"
a350 :: IO (); a350 = forever $ putStrLn "a350"
a351 :: IO (); a351 = forever $ putStrLn "a351"
a352 :: IO (); a352 = forever $ putStrLn "a352"
a353 :: IO (); a353 = forever $ putStrLn "a353"
a354 :: IO (); a354 = forever $ putStrLn "a354"
a355 :: IO (); a355 = forever $ putStrLn "a355"
a356 :: IO (); a356 = forever $ putStrLn "a356"
a357 :: IO (); a357 = forever $ putStrLn "a357"
a358 :: IO (); a358 = forever $ putStrLn "a358"
a359 :: IO (); a359 = forever $ putStrLn "a359"
a360 :: IO (); a360 = forever $ putStrLn "a360"
a361 :: IO (); a361 = forever $ putStrLn "a361"
a362 :: IO (); a362 = forever $ putStrLn "a362"
a363 :: IO (); a363 = forever $ putStrLn "a363"
a364 :: IO (); a364 = forever $ putStrLn "a364"
a365 :: IO (); a365 = forever $ putStrLn "a365"
a366 :: IO (); a366 = forever $ putStrLn "a366"
a367 :: IO (); a367 = forever $ putStrLn "a367"
a368 :: IO (); a368 = forever $ putStrLn "a368"
a369 :: IO (); a369 = forever $ putStrLn "a369"
a370 :: IO (); a370 = forever $ putStrLn "a370"
a371 :: IO (); a371 = forever $ putStrLn "a371"
a372 :: IO (); a372 = forever $ putStrLn "a372"
a373 :: IO (); a373 = forever $ putStrLn "a373"
a374 :: IO (); a374 = forever $ putStrLn "a374"
a375 :: IO (); a375 = forever $ putStrLn "a375"
a376 :: IO (); a376 = forever $ putStrLn "a376"
a377 :: IO (); a377 = forever $ putStrLn "a377"
a378 :: IO (); a378 = forever $ putStrLn "a378"
a379 :: IO (); a379 = forever $ putStrLn "a379"
a380 :: IO (); a380 = forever $ putStrLn "a380"
a381 :: IO (); a381 = forever $ putStrLn "a381"
a382 :: IO (); a382 = forever $ putStrLn "a382"
a383 :: IO (); a383 = forever $ putStrLn "a383"
a384 :: IO (); a384 = forever $ putStrLn "a384"
a385 :: IO (); a385 = forever $ putStrLn "a385"
a386 :: IO (); a386 = forever $ putStrLn "a386"
a387 :: IO (); a387 = forever $ putStrLn "a387"
a388 :: IO (); a388 = forever $ putStrLn "a388"
a389 :: IO (); a389 = forever $ putStrLn "a389"
a390 :: IO (); a390 = forever $ putStrLn "a390"
a391 :: IO (); a391 = forever $ putStrLn "a391"
a392 :: IO (); a392 = forever $ putStrLn "a392"
a393 :: IO (); a393 = forever $ putStrLn "a393"
a394 :: IO (); a394 = forever $ putStrLn "a394"
a395 :: IO (); a395 = forever $ putStrLn "a395"
a396 :: IO (); a396 = forever $ putStrLn "a396"
a397 :: IO (); a397 = forever $ putStrLn "a397"
a398 :: IO (); a398 = forever $ putStrLn "a398"
a399 :: IO (); a399 = forever $ putStrLn "a399"
a400 :: IO (); a400 = forever $ putStrLn "a400"
a401 :: IO (); a401 = forever $ putStrLn "a401"
a402 :: IO (); a402 = forever $ putStrLn "a402"
a403 :: IO (); a403 = forever $ putStrLn "a403"
a404 :: IO (); a404 = forever $ putStrLn "a404"
a405 :: IO (); a405 = forever $ putStrLn "a405"
a406 :: IO (); a406 = forever $ putStrLn "a406"
a407 :: IO (); a407 = forever $ putStrLn "a407"
a408 :: IO (); a408 = forever $ putStrLn "a408"
a409 :: IO (); a409 = forever $ putStrLn "a409"
a410 :: IO (); a410 = forever $ putStrLn "a410"
a411 :: IO (); a411 = forever $ putStrLn "a411"
a412 :: IO (); a412 = forever $ putStrLn "a412"
a413 :: IO (); a413 = forever $ putStrLn "a413"
a414 :: IO (); a414 = forever $ putStrLn "a414"
a415 :: IO (); a415 = forever $ putStrLn "a415"
a416 :: IO (); a416 = forever $ putStrLn "a416"
a417 :: IO (); a417 = forever $ putStrLn "a417"
a418 :: IO (); a418 = forever $ putStrLn "a418"
a419 :: IO (); a419 = forever $ putStrLn "a419"
a420 :: IO (); a420 = forever $ putStrLn "a420"
a421 :: IO (); a421 = forever $ putStrLn "a421"
a422 :: IO (); a422 = forever $ putStrLn "a422"
a423 :: IO (); a423 = forever $ putStrLn "a423"
a424 :: IO (); a424 = forever $ putStrLn "a424"
a425 :: IO (); a425 = forever $ putStrLn "a425"
a426 :: IO (); a426 = forever $ putStrLn "a426"
a427 :: IO (); a427 = forever $ putStrLn "a427"
a428 :: IO (); a428 = forever $ putStrLn "a428"
a429 :: IO (); a429 = forever $ putStrLn "a429"
a430 :: IO (); a430 = forever $ putStrLn "a430"
a431 :: IO (); a431 = forever $ putStrLn "a431"
a432 :: IO (); a432 = forever $ putStrLn "a432"
a433 :: IO (); a433 = forever $ putStrLn "a433"
a434 :: IO (); a434 = forever $ putStrLn "a434"
a435 :: IO (); a435 = forever $ putStrLn "a435"
a436 :: IO (); a436 = forever $ putStrLn "a436"
a437 :: IO (); a437 = forever $ putStrLn "a437"
a438 :: IO (); a438 = forever $ putStrLn "a438"
a439 :: IO (); a439 = forever $ putStrLn "a439"
a440 :: IO (); a440 = forever $ putStrLn "a440"
a441 :: IO (); a441 = forever $ putStrLn "a441"
a442 :: IO (); a442 = forever $ putStrLn "a442"
a443 :: IO (); a443 = forever $ putStrLn "a443"
a444 :: IO (); a444 = forever $ putStrLn "a444"
a445 :: IO (); a445 = forever $ putStrLn "a445"
a446 :: IO (); a446 = forever $ putStrLn "a446"
a447 :: IO (); a447 = forever $ putStrLn "a447"
a448 :: IO (); a448 = forever $ putStrLn "a448"
a449 :: IO (); a449 = forever $ putStrLn "a449"
a450 :: IO (); a450 = forever $ putStrLn "a450"
a451 :: IO (); a451 = forever $ putStrLn "a451"
a452 :: IO (); a452 = forever $ putStrLn "a452"
a453 :: IO (); a453 = forever $ putStrLn "a453"
a454 :: IO (); a454 = forever $ putStrLn "a454"
a455 :: IO (); a455 = forever $ putStrLn "a455"
a456 :: IO (); a456 = forever $ putStrLn "a456"
a457 :: IO (); a457 = forever $ putStrLn "a457"
a458 :: IO (); a458 = forever $ putStrLn "a458"
a459 :: IO (); a459 = forever $ putStrLn "a459"
a460 :: IO (); a460 = forever $ putStrLn "a460"
a461 :: IO (); a461 = forever $ putStrLn "a461"
a462 :: IO (); a462 = forever $ putStrLn "a462"
a463 :: IO (); a463 = forever $ putStrLn "a463"
a464 :: IO (); a464 = forever $ putStrLn "a464"
a465 :: IO (); a465 = forever $ putStrLn "a465"
a466 :: IO (); a466 = forever $ putStrLn "a466"
a467 :: IO (); a467 = forever $ putStrLn "a467"
a468 :: IO (); a468 = forever $ putStrLn "a468"
a469 :: IO (); a469 = forever $ putStrLn "a469"
a470 :: IO (); a470 = forever $ putStrLn "a470"
a471 :: IO (); a471 = forever $ putStrLn "a471"
a472 :: IO (); a472 = forever $ putStrLn "a472"
a473 :: IO (); a473 = forever $ putStrLn "a473"
a474 :: IO (); a474 = forever $ putStrLn "a474"
a475 :: IO (); a475 = forever $ putStrLn "a475"
a476 :: IO (); a476 = forever $ putStrLn "a476"
a477 :: IO (); a477 = forever $ putStrLn "a477"
a478 :: IO (); a478 = forever $ putStrLn "a478"
a479 :: IO (); a479 = forever $ putStrLn "a479"
a480 :: IO (); a480 = forever $ putStrLn "a480"
a481 :: IO (); a481 = forever $ putStrLn "a481"
a482 :: IO (); a482 = forever $ putStrLn "a482"
a483 :: IO (); a483 = forever $ putStrLn "a483"
a484 :: IO (); a484 = forever $ putStrLn "a484"
a485 :: IO (); a485 = forever $ putStrLn "a485"
a486 :: IO (); a486 = forever $ putStrLn "a486"
a487 :: IO (); a487 = forever $ putStrLn "a487"
a488 :: IO (); a488 = forever $ putStrLn "a488"
a489 :: IO (); a489 = forever $ putStrLn "a489"
a490 :: IO (); a490 = forever $ putStrLn "a490"
a491 :: IO (); a491 = forever $ putStrLn "a491"
a492 :: IO (); a492 = forever $ putStrLn "a492"
a493 :: IO (); a493 = forever $ putStrLn "a493"
a494 :: IO (); a494 = forever $ putStrLn "a494"
a495 :: IO (); a495 = forever $ putStrLn "a495"
a496 :: IO (); a496 = forever $ putStrLn "a496"
a497 :: IO (); a497 = forever $ putStrLn "a497"
a498 :: IO (); a498 = forever $ putStrLn "a498"
a499 :: IO (); a499 = forever $ putStrLn "a499"
a500 :: IO (); a500 = forever $ putStrLn "a500"
a501 :: IO (); a501 = forever $ putStrLn "a501"
a502 :: IO (); a502 = forever $ putStrLn "a502"
a503 :: IO (); a503 = forever $ putStrLn "a503"
a504 :: IO (); a504 = forever $ putStrLn "a504"
a505 :: IO (); a505 = forever $ putStrLn "a505"
a506 :: IO (); a506 = forever $ putStrLn "a506"
a507 :: IO (); a507 = forever $ putStrLn "a507"
a508 :: IO (); a508 = forever $ putStrLn "a508"
a509 :: IO (); a509 = forever $ putStrLn "a509"
a510 :: IO (); a510 = forever $ putStrLn "a510"
a511 :: IO (); a511 = forever $ putStrLn "a511"
a512 :: IO (); a512 = forever $ putStrLn "a512"
a513 :: IO (); a513 = forever $ putStrLn "a513"
a514 :: IO (); a514 = forever $ putStrLn "a514"
a515 :: IO (); a515 = forever $ putStrLn "a515"
a516 :: IO (); a516 = forever $ putStrLn "a516"
a517 :: IO (); a517 = forever $ putStrLn "a517"
a518 :: IO (); a518 = forever $ putStrLn "a518"
a519 :: IO (); a519 = forever $ putStrLn "a519"
a520 :: IO (); a520 = forever $ putStrLn "a520"
a521 :: IO (); a521 = forever $ putStrLn "a521"
a522 :: IO (); a522 = forever $ putStrLn "a522"
a523 :: IO (); a523 = forever $ putStrLn "a523"
a524 :: IO (); a524 = forever $ putStrLn "a524"
a525 :: IO (); a525 = forever $ putStrLn "a525"
a526 :: IO (); a526 = forever $ putStrLn "a526"
a527 :: IO (); a527 = forever $ putStrLn "a527"
a528 :: IO (); a528 = forever $ putStrLn "a528"
a529 :: IO (); a529 = forever $ putStrLn "a529"
a530 :: IO (); a530 = forever $ putStrLn "a530"
a531 :: IO (); a531 = forever $ putStrLn "a531"
a532 :: IO (); a532 = forever $ putStrLn "a532"
a533 :: IO (); a533 = forever $ putStrLn "a533"
a534 :: IO (); a534 = forever $ putStrLn "a534"
a535 :: IO (); a535 = forever $ putStrLn "a535"
a536 :: IO (); a536 = forever $ putStrLn "a536"
a537 :: IO (); a537 = forever $ putStrLn "a537"
a538 :: IO (); a538 = forever $ putStrLn "a538"
a539 :: IO (); a539 = forever $ putStrLn "a539"
a540 :: IO (); a540 = forever $ putStrLn "a540"
a541 :: IO (); a541 = forever $ putStrLn "a541"
a542 :: IO (); a542 = forever $ putStrLn "a542"
a543 :: IO (); a543 = forever $ putStrLn "a543"
a544 :: IO (); a544 = forever $ putStrLn "a544"
a545 :: IO (); a545 = forever $ putStrLn "a545"
a546 :: IO (); a546 = forever $ putStrLn "a546"
a547 :: IO (); a547 = forever $ putStrLn "a547"
a548 :: IO (); a548 = forever $ putStrLn "a548"
a549 :: IO (); a549 = forever $ putStrLn "a549"
a550 :: IO (); a550 = forever $ putStrLn "a550"
a551 :: IO (); a551 = forever $ putStrLn "a551"
a552 :: IO (); a552 = forever $ putStrLn "a552"
a553 :: IO (); a553 = forever $ putStrLn "a553"
a554 :: IO (); a554 = forever $ putStrLn "a554"
a555 :: IO (); a555 = forever $ putStrLn "a555"
a556 :: IO (); a556 = forever $ putStrLn "a556"
a557 :: IO (); a557 = forever $ putStrLn "a557"
a558 :: IO (); a558 = forever $ putStrLn "a558"
a559 :: IO (); a559 = forever $ putStrLn "a559"
a560 :: IO (); a560 = forever $ putStrLn "a560"
a561 :: IO (); a561 = forever $ putStrLn "a561"
a562 :: IO (); a562 = forever $ putStrLn "a562"
a563 :: IO (); a563 = forever $ putStrLn "a563"
a564 :: IO (); a564 = forever $ putStrLn "a564"
a565 :: IO (); a565 = forever $ putStrLn "a565"
a566 :: IO (); a566 = forever $ putStrLn "a566"
a567 :: IO (); a567 = forever $ putStrLn "a567"
a568 :: IO (); a568 = forever $ putStrLn "a568"
a569 :: IO (); a569 = forever $ putStrLn "a569"
a570 :: IO (); a570 = forever $ putStrLn "a570"
a571 :: IO (); a571 = forever $ putStrLn "a571"
a572 :: IO (); a572 = forever $ putStrLn "a572"
a573 :: IO (); a573 = forever $ putStrLn "a573"
a574 :: IO (); a574 = forever $ putStrLn "a574"
a575 :: IO (); a575 = forever $ putStrLn "a575"
a576 :: IO (); a576 = forever $ putStrLn "a576"
a577 :: IO (); a577 = forever $ putStrLn "a577"
a578 :: IO (); a578 = forever $ putStrLn "a578"
a579 :: IO (); a579 = forever $ putStrLn "a579"
a580 :: IO (); a580 = forever $ putStrLn "a580"
a581 :: IO (); a581 = forever $ putStrLn "a581"
a582 :: IO (); a582 = forever $ putStrLn "a582"
a583 :: IO (); a583 = forever $ putStrLn "a583"
a584 :: IO (); a584 = forever $ putStrLn "a584"
a585 :: IO (); a585 = forever $ putStrLn "a585"
a586 :: IO (); a586 = forever $ putStrLn "a586"
a587 :: IO (); a587 = forever $ putStrLn "a587"
a588 :: IO (); a588 = forever $ putStrLn "a588"
a589 :: IO (); a589 = forever $ putStrLn "a589"
a590 :: IO (); a590 = forever $ putStrLn "a590"
a591 :: IO (); a591 = forever $ putStrLn "a591"
a592 :: IO (); a592 = forever $ putStrLn "a592"
a593 :: IO (); a593 = forever $ putStrLn "a593"
a594 :: IO (); a594 = forever $ putStrLn "a594"
a595 :: IO (); a595 = forever $ putStrLn "a595"
a596 :: IO (); a596 = forever $ putStrLn "a596"
a597 :: IO (); a597 = forever $ putStrLn "a597"
a598 :: IO (); a598 = forever $ putStrLn "a598"
a599 :: IO (); a599 = forever $ putStrLn "a599"
a600 :: IO (); a600 = forever $ putStrLn "a600"
a601 :: IO (); a601 = forever $ putStrLn "a601"
a602 :: IO (); a602 = forever $ putStrLn "a602"
a603 :: IO (); a603 = forever $ putStrLn "a603"
a604 :: IO (); a604 = forever $ putStrLn "a604"
a605 :: IO (); a605 = forever $ putStrLn "a605"
a606 :: IO (); a606 = forever $ putStrLn "a606"
a607 :: IO (); a607 = forever $ putStrLn "a607"
a608 :: IO (); a608 = forever $ putStrLn "a608"
a609 :: IO (); a609 = forever $ putStrLn "a609"
a610 :: IO (); a610 = forever $ putStrLn "a610"
a611 :: IO (); a611 = forever $ putStrLn "a611"
a612 :: IO (); a612 = forever $ putStrLn "a612"
a613 :: IO (); a613 = forever $ putStrLn "a613"
a614 :: IO (); a614 = forever $ putStrLn "a614"
a615 :: IO (); a615 = forever $ putStrLn "a615"
a616 :: IO (); a616 = forever $ putStrLn "a616"
a617 :: IO (); a617 = forever $ putStrLn "a617"
a618 :: IO (); a618 = forever $ putStrLn "a618"
a619 :: IO (); a619 = forever $ putStrLn "a619"
a620 :: IO (); a620 = forever $ putStrLn "a620"
a621 :: IO (); a621 = forever $ putStrLn "a621"
a622 :: IO (); a622 = forever $ putStrLn "a622"
a623 :: IO (); a623 = forever $ putStrLn "a623"
a624 :: IO (); a624 = forever $ putStrLn "a624"
a625 :: IO (); a625 = forever $ putStrLn "a625"
a626 :: IO (); a626 = forever $ putStrLn "a626"
a627 :: IO (); a627 = forever $ putStrLn "a627"
a628 :: IO (); a628 = forever $ putStrLn "a628"
a629 :: IO (); a629 = forever $ putStrLn "a629"
a630 :: IO (); a630 = forever $ putStrLn "a630"
a631 :: IO (); a631 = forever $ putStrLn "a631"
a632 :: IO (); a632 = forever $ putStrLn "a632"
a633 :: IO (); a633 = forever $ putStrLn "a633"
a634 :: IO (); a634 = forever $ putStrLn "a634"
a635 :: IO (); a635 = forever $ putStrLn "a635"
a636 :: IO (); a636 = forever $ putStrLn "a636"
a637 :: IO (); a637 = forever $ putStrLn "a637"
a638 :: IO (); a638 = forever $ putStrLn "a638"
a639 :: IO (); a639 = forever $ putStrLn "a639"
a640 :: IO (); a640 = forever $ putStrLn "a640"
a641 :: IO (); a641 = forever $ putStrLn "a641"
a642 :: IO (); a642 = forever $ putStrLn "a642"
a643 :: IO (); a643 = forever $ putStrLn "a643"
a644 :: IO (); a644 = forever $ putStrLn "a644"
a645 :: IO (); a645 = forever $ putStrLn "a645"
a646 :: IO (); a646 = forever $ putStrLn "a646"
a647 :: IO (); a647 = forever $ putStrLn "a647"
a648 :: IO (); a648 = forever $ putStrLn "a648"
a649 :: IO (); a649 = forever $ putStrLn "a649"
a650 :: IO (); a650 = forever $ putStrLn "a650"
a651 :: IO (); a651 = forever $ putStrLn "a651"
a652 :: IO (); a652 = forever $ putStrLn "a652"
a653 :: IO (); a653 = forever $ putStrLn "a653"
a654 :: IO (); a654 = forever $ putStrLn "a654"
a655 :: IO (); a655 = forever $ putStrLn "a655"
a656 :: IO (); a656 = forever $ putStrLn "a656"
a657 :: IO (); a657 = forever $ putStrLn "a657"
a658 :: IO (); a658 = forever $ putStrLn "a658"
a659 :: IO (); a659 = forever $ putStrLn "a659"
a660 :: IO (); a660 = forever $ putStrLn "a660"
a661 :: IO (); a661 = forever $ putStrLn "a661"
a662 :: IO (); a662 = forever $ putStrLn "a662"
a663 :: IO (); a663 = forever $ putStrLn "a663"
a664 :: IO (); a664 = forever $ putStrLn "a664"
a665 :: IO (); a665 = forever $ putStrLn "a665"
a666 :: IO (); a666 = forever $ putStrLn "a666"
a667 :: IO (); a667 = forever $ putStrLn "a667"
a668 :: IO (); a668 = forever $ putStrLn "a668"
a669 :: IO (); a669 = forever $ putStrLn "a669"
a670 :: IO (); a670 = forever $ putStrLn "a670"
a671 :: IO (); a671 = forever $ putStrLn "a671"
a672 :: IO (); a672 = forever $ putStrLn "a672"
a673 :: IO (); a673 = forever $ putStrLn "a673"
a674 :: IO (); a674 = forever $ putStrLn "a674"
a675 :: IO (); a675 = forever $ putStrLn "a675"
a676 :: IO (); a676 = forever $ putStrLn "a676"
a677 :: IO (); a677 = forever $ putStrLn "a677"
a678 :: IO (); a678 = forever $ putStrLn "a678"
a679 :: IO (); a679 = forever $ putStrLn "a679"
a680 :: IO (); a680 = forever $ putStrLn "a680"
a681 :: IO (); a681 = forever $ putStrLn "a681"
a682 :: IO (); a682 = forever $ putStrLn "a682"
a683 :: IO (); a683 = forever $ putStrLn "a683"
a684 :: IO (); a684 = forever $ putStrLn "a684"
a685 :: IO (); a685 = forever $ putStrLn "a685"
a686 :: IO (); a686 = forever $ putStrLn "a686"
a687 :: IO (); a687 = forever $ putStrLn "a687"
a688 :: IO (); a688 = forever $ putStrLn "a688"
a689 :: IO (); a689 = forever $ putStrLn "a689"
a690 :: IO (); a690 = forever $ putStrLn "a690"
a691 :: IO (); a691 = forever $ putStrLn "a691"
a692 :: IO (); a692 = forever $ putStrLn "a692"
a693 :: IO (); a693 = forever $ putStrLn "a693"
a694 :: IO (); a694 = forever $ putStrLn "a694"
a695 :: IO (); a695 = forever $ putStrLn "a695"
a696 :: IO (); a696 = forever $ putStrLn "a696"
a697 :: IO (); a697 = forever $ putStrLn "a697"
a698 :: IO (); a698 = forever $ putStrLn "a698"
a699 :: IO (); a699 = forever $ putStrLn "a699"
a700 :: IO (); a700 = forever $ putStrLn "a700"
a701 :: IO (); a701 = forever $ putStrLn "a701"
a702 :: IO (); a702 = forever $ putStrLn "a702"
a703 :: IO (); a703 = forever $ putStrLn "a703"
a704 :: IO (); a704 = forever $ putStrLn "a704"
a705 :: IO (); a705 = forever $ putStrLn "a705"
a706 :: IO (); a706 = forever $ putStrLn "a706"
a707 :: IO (); a707 = forever $ putStrLn "a707"
a708 :: IO (); a708 = forever $ putStrLn "a708"
a709 :: IO (); a709 = forever $ putStrLn "a709"
a710 :: IO (); a710 = forever $ putStrLn "a710"
a711 :: IO (); a711 = forever $ putStrLn "a711"
a712 :: IO (); a712 = forever $ putStrLn "a712"
a713 :: IO (); a713 = forever $ putStrLn "a713"
a714 :: IO (); a714 = forever $ putStrLn "a714"
a715 :: IO (); a715 = forever $ putStrLn "a715"
a716 :: IO (); a716 = forever $ putStrLn "a716"
a717 :: IO (); a717 = forever $ putStrLn "a717"
a718 :: IO (); a718 = forever $ putStrLn "a718"
a719 :: IO (); a719 = forever $ putStrLn "a719"
a720 :: IO (); a720 = forever $ putStrLn "a720"
a721 :: IO (); a721 = forever $ putStrLn "a721"
a722 :: IO (); a722 = forever $ putStrLn "a722"
a723 :: IO (); a723 = forever $ putStrLn "a723"
a724 :: IO (); a724 = forever $ putStrLn "a724"
a725 :: IO (); a725 = forever $ putStrLn "a725"
a726 :: IO (); a726 = forever $ putStrLn "a726"
a727 :: IO (); a727 = forever $ putStrLn "a727"
a728 :: IO (); a728 = forever $ putStrLn "a728"
a729 :: IO (); a729 = forever $ putStrLn "a729"
a730 :: IO (); a730 = forever $ putStrLn "a730"
a731 :: IO (); a731 = forever $ putStrLn "a731"
a732 :: IO (); a732 = forever $ putStrLn "a732"
a733 :: IO (); a733 = forever $ putStrLn "a733"
a734 :: IO (); a734 = forever $ putStrLn "a734"
a735 :: IO (); a735 = forever $ putStrLn "a735"
a736 :: IO (); a736 = forever $ putStrLn "a736"
a737 :: IO (); a737 = forever $ putStrLn "a737"
a738 :: IO (); a738 = forever $ putStrLn "a738"
a739 :: IO (); a739 = forever $ putStrLn "a739"
a740 :: IO (); a740 = forever $ putStrLn "a740"
a741 :: IO (); a741 = forever $ putStrLn "a741"
a742 :: IO (); a742 = forever $ putStrLn "a742"
a743 :: IO (); a743 = forever $ putStrLn "a743"
a744 :: IO (); a744 = forever $ putStrLn "a744"
a745 :: IO (); a745 = forever $ putStrLn "a745"
a746 :: IO (); a746 = forever $ putStrLn "a746"
a747 :: IO (); a747 = forever $ putStrLn "a747"
a748 :: IO (); a748 = forever $ putStrLn "a748"
a749 :: IO (); a749 = forever $ putStrLn "a749"
a750 :: IO (); a750 = forever $ putStrLn "a750"
a751 :: IO (); a751 = forever $ putStrLn "a751"
a752 :: IO (); a752 = forever $ putStrLn "a752"
a753 :: IO (); a753 = forever $ putStrLn "a753"
a754 :: IO (); a754 = forever $ putStrLn "a754"
a755 :: IO (); a755 = forever $ putStrLn "a755"
a756 :: IO (); a756 = forever $ putStrLn "a756"
a757 :: IO (); a757 = forever $ putStrLn "a757"
a758 :: IO (); a758 = forever $ putStrLn "a758"
a759 :: IO (); a759 = forever $ putStrLn "a759"
a760 :: IO (); a760 = forever $ putStrLn "a760"
a761 :: IO (); a761 = forever $ putStrLn "a761"
a762 :: IO (); a762 = forever $ putStrLn "a762"
a763 :: IO (); a763 = forever $ putStrLn "a763"
a764 :: IO (); a764 = forever $ putStrLn "a764"
a765 :: IO (); a765 = forever $ putStrLn "a765"
a766 :: IO (); a766 = forever $ putStrLn "a766"
a767 :: IO (); a767 = forever $ putStrLn "a767"
a768 :: IO (); a768 = forever $ putStrLn "a768"
a769 :: IO (); a769 = forever $ putStrLn "a769"
a770 :: IO (); a770 = forever $ putStrLn "a770"
a771 :: IO (); a771 = forever $ putStrLn "a771"
a772 :: IO (); a772 = forever $ putStrLn "a772"
a773 :: IO (); a773 = forever $ putStrLn "a773"
a774 :: IO (); a774 = forever $ putStrLn "a774"
a775 :: IO (); a775 = forever $ putStrLn "a775"
a776 :: IO (); a776 = forever $ putStrLn "a776"
a777 :: IO (); a777 = forever $ putStrLn "a777"
a778 :: IO (); a778 = forever $ putStrLn "a778"
a779 :: IO (); a779 = forever $ putStrLn "a779"
a780 :: IO (); a780 = forever $ putStrLn "a780"
a781 :: IO (); a781 = forever $ putStrLn "a781"
a782 :: IO (); a782 = forever $ putStrLn "a782"
a783 :: IO (); a783 = forever $ putStrLn "a783"
a784 :: IO (); a784 = forever $ putStrLn "a784"
a785 :: IO (); a785 = forever $ putStrLn "a785"
a786 :: IO (); a786 = forever $ putStrLn "a786"
a787 :: IO (); a787 = forever $ putStrLn "a787"
a788 :: IO (); a788 = forever $ putStrLn "a788"
a789 :: IO (); a789 = forever $ putStrLn "a789"
a790 :: IO (); a790 = forever $ putStrLn "a790"
a791 :: IO (); a791 = forever $ putStrLn "a791"
a792 :: IO (); a792 = forever $ putStrLn "a792"
a793 :: IO (); a793 = forever $ putStrLn "a793"
a794 :: IO (); a794 = forever $ putStrLn "a794"
a795 :: IO (); a795 = forever $ putStrLn "a795"
a796 :: IO (); a796 = forever $ putStrLn "a796"
a797 :: IO (); a797 = forever $ putStrLn "a797"
a798 :: IO (); a798 = forever $ putStrLn "a798"
a799 :: IO (); a799 = forever $ putStrLn "a799"
a800 :: IO (); a800 = forever $ putStrLn "a800"
a801 :: IO (); a801 = forever $ putStrLn "a801"
a802 :: IO (); a802 = forever $ putStrLn "a802"
a803 :: IO (); a803 = forever $ putStrLn "a803"
a804 :: IO (); a804 = forever $ putStrLn "a804"
a805 :: IO (); a805 = forever $ putStrLn "a805"
a806 :: IO (); a806 = forever $ putStrLn "a806"
a807 :: IO (); a807 = forever $ putStrLn "a807"
a808 :: IO (); a808 = forever $ putStrLn "a808"
a809 :: IO (); a809 = forever $ putStrLn "a809"
a810 :: IO (); a810 = forever $ putStrLn "a810"
a811 :: IO (); a811 = forever $ putStrLn "a811"
a812 :: IO (); a812 = forever $ putStrLn "a812"
a813 :: IO (); a813 = forever $ putStrLn "a813"
a814 :: IO (); a814 = forever $ putStrLn "a814"
a815 :: IO (); a815 = forever $ putStrLn "a815"
a816 :: IO (); a816 = forever $ putStrLn "a816"
a817 :: IO (); a817 = forever $ putStrLn "a817"
a818 :: IO (); a818 = forever $ putStrLn "a818"
a819 :: IO (); a819 = forever $ putStrLn "a819"
a820 :: IO (); a820 = forever $ putStrLn "a820"
a821 :: IO (); a821 = forever $ putStrLn "a821"
a822 :: IO (); a822 = forever $ putStrLn "a822"
a823 :: IO (); a823 = forever $ putStrLn "a823"
a824 :: IO (); a824 = forever $ putStrLn "a824"
a825 :: IO (); a825 = forever $ putStrLn "a825"
a826 :: IO (); a826 = forever $ putStrLn "a826"
a827 :: IO (); a827 = forever $ putStrLn "a827"
a828 :: IO (); a828 = forever $ putStrLn "a828"
a829 :: IO (); a829 = forever $ putStrLn "a829"
a830 :: IO (); a830 = forever $ putStrLn "a830"
a831 :: IO (); a831 = forever $ putStrLn "a831"
a832 :: IO (); a832 = forever $ putStrLn "a832"
a833 :: IO (); a833 = forever $ putStrLn "a833"
a834 :: IO (); a834 = forever $ putStrLn "a834"
a835 :: IO (); a835 = forever $ putStrLn "a835"
a836 :: IO (); a836 = forever $ putStrLn "a836"
a837 :: IO (); a837 = forever $ putStrLn "a837"
a838 :: IO (); a838 = forever $ putStrLn "a838"
a839 :: IO (); a839 = forever $ putStrLn "a839"
a840 :: IO (); a840 = forever $ putStrLn "a840"
a841 :: IO (); a841 = forever $ putStrLn "a841"
a842 :: IO (); a842 = forever $ putStrLn "a842"
a843 :: IO (); a843 = forever $ putStrLn "a843"
a844 :: IO (); a844 = forever $ putStrLn "a844"
a845 :: IO (); a845 = forever $ putStrLn "a845"
a846 :: IO (); a846 = forever $ putStrLn "a846"
a847 :: IO (); a847 = forever $ putStrLn "a847"
a848 :: IO (); a848 = forever $ putStrLn "a848"
a849 :: IO (); a849 = forever $ putStrLn "a849"
a850 :: IO (); a850 = forever $ putStrLn "a850"
a851 :: IO (); a851 = forever $ putStrLn "a851"
a852 :: IO (); a852 = forever $ putStrLn "a852"
a853 :: IO (); a853 = forever $ putStrLn "a853"
a854 :: IO (); a854 = forever $ putStrLn "a854"
a855 :: IO (); a855 = forever $ putStrLn "a855"
a856 :: IO (); a856 = forever $ putStrLn "a856"
a857 :: IO (); a857 = forever $ putStrLn "a857"
a858 :: IO (); a858 = forever $ putStrLn "a858"
a859 :: IO (); a859 = forever $ putStrLn "a859"
a860 :: IO (); a860 = forever $ putStrLn "a860"
a861 :: IO (); a861 = forever $ putStrLn "a861"
a862 :: IO (); a862 = forever $ putStrLn "a862"
a863 :: IO (); a863 = forever $ putStrLn "a863"
a864 :: IO (); a864 = forever $ putStrLn "a864"
a865 :: IO (); a865 = forever $ putStrLn "a865"
a866 :: IO (); a866 = forever $ putStrLn "a866"
a867 :: IO (); a867 = forever $ putStrLn "a867"
a868 :: IO (); a868 = forever $ putStrLn "a868"
a869 :: IO (); a869 = forever $ putStrLn "a869"
a870 :: IO (); a870 = forever $ putStrLn "a870"
a871 :: IO (); a871 = forever $ putStrLn "a871"
a872 :: IO (); a872 = forever $ putStrLn "a872"
a873 :: IO (); a873 = forever $ putStrLn "a873"
a874 :: IO (); a874 = forever $ putStrLn "a874"
a875 :: IO (); a875 = forever $ putStrLn "a875"
a876 :: IO (); a876 = forever $ putStrLn "a876"
a877 :: IO (); a877 = forever $ putStrLn "a877"
a878 :: IO (); a878 = forever $ putStrLn "a878"
a879 :: IO (); a879 = forever $ putStrLn "a879"
a880 :: IO (); a880 = forever $ putStrLn "a880"
a881 :: IO (); a881 = forever $ putStrLn "a881"
a882 :: IO (); a882 = forever $ putStrLn "a882"
a883 :: IO (); a883 = forever $ putStrLn "a883"
a884 :: IO (); a884 = forever $ putStrLn "a884"
a885 :: IO (); a885 = forever $ putStrLn "a885"
a886 :: IO (); a886 = forever $ putStrLn "a886"
a887 :: IO (); a887 = forever $ putStrLn "a887"
a888 :: IO (); a888 = forever $ putStrLn "a888"
a889 :: IO (); a889 = forever $ putStrLn "a889"
a890 :: IO (); a890 = forever $ putStrLn "a890"
a891 :: IO (); a891 = forever $ putStrLn "a891"
a892 :: IO (); a892 = forever $ putStrLn "a892"
a893 :: IO (); a893 = forever $ putStrLn "a893"
a894 :: IO (); a894 = forever $ putStrLn "a894"
a895 :: IO (); a895 = forever $ putStrLn "a895"
a896 :: IO (); a896 = forever $ putStrLn "a896"
a897 :: IO (); a897 = forever $ putStrLn "a897"
a898 :: IO (); a898 = forever $ putStrLn "a898"
a899 :: IO (); a899 = forever $ putStrLn "a899"
a900 :: IO (); a900 = forever $ putStrLn "a900"
a901 :: IO (); a901 = forever $ putStrLn "a901"
a902 :: IO (); a902 = forever $ putStrLn "a902"
a903 :: IO (); a903 = forever $ putStrLn "a903"
a904 :: IO (); a904 = forever $ putStrLn "a904"
a905 :: IO (); a905 = forever $ putStrLn "a905"
a906 :: IO (); a906 = forever $ putStrLn "a906"
a907 :: IO (); a907 = forever $ putStrLn "a907"
a908 :: IO (); a908 = forever $ putStrLn "a908"
a909 :: IO (); a909 = forever $ putStrLn "a909"
a910 :: IO (); a910 = forever $ putStrLn "a910"
a911 :: IO (); a911 = forever $ putStrLn "a911"
a912 :: IO (); a912 = forever $ putStrLn "a912"
a913 :: IO (); a913 = forever $ putStrLn "a913"
a914 :: IO (); a914 = forever $ putStrLn "a914"
a915 :: IO (); a915 = forever $ putStrLn "a915"
a916 :: IO (); a916 = forever $ putStrLn "a916"
a917 :: IO (); a917 = forever $ putStrLn "a917"
a918 :: IO (); a918 = forever $ putStrLn "a918"
a919 :: IO (); a919 = forever $ putStrLn "a919"
a920 :: IO (); a920 = forever $ putStrLn "a920"
a921 :: IO (); a921 = forever $ putStrLn "a921"
a922 :: IO (); a922 = forever $ putStrLn "a922"
a923 :: IO (); a923 = forever $ putStrLn "a923"
a924 :: IO (); a924 = forever $ putStrLn "a924"
a925 :: IO (); a925 = forever $ putStrLn "a925"
a926 :: IO (); a926 = forever $ putStrLn "a926"
a927 :: IO (); a927 = forever $ putStrLn "a927"
a928 :: IO (); a928 = forever $ putStrLn "a928"
a929 :: IO (); a929 = forever $ putStrLn "a929"
a930 :: IO (); a930 = forever $ putStrLn "a930"
a931 :: IO (); a931 = forever $ putStrLn "a931"
a932 :: IO (); a932 = forever $ putStrLn "a932"
a933 :: IO (); a933 = forever $ putStrLn "a933"
a934 :: IO (); a934 = forever $ putStrLn "a934"
a935 :: IO (); a935 = forever $ putStrLn "a935"
a936 :: IO (); a936 = forever $ putStrLn "a936"
a937 :: IO (); a937 = forever $ putStrLn "a937"
a938 :: IO (); a938 = forever $ putStrLn "a938"
a939 :: IO (); a939 = forever $ putStrLn "a939"
a940 :: IO (); a940 = forever $ putStrLn "a940"
a941 :: IO (); a941 = forever $ putStrLn "a941"
a942 :: IO (); a942 = forever $ putStrLn "a942"
a943 :: IO (); a943 = forever $ putStrLn "a943"
a944 :: IO (); a944 = forever $ putStrLn "a944"
a945 :: IO (); a945 = forever $ putStrLn "a945"
a946 :: IO (); a946 = forever $ putStrLn "a946"
a947 :: IO (); a947 = forever $ putStrLn "a947"
a948 :: IO (); a948 = forever $ putStrLn "a948"
a949 :: IO (); a949 = forever $ putStrLn "a949"
a950 :: IO (); a950 = forever $ putStrLn "a950"
a951 :: IO (); a951 = forever $ putStrLn "a951"
a952 :: IO (); a952 = forever $ putStrLn "a952"
a953 :: IO (); a953 = forever $ putStrLn "a953"
a954 :: IO (); a954 = forever $ putStrLn "a954"
a955 :: IO (); a955 = forever $ putStrLn "a955"
a956 :: IO (); a956 = forever $ putStrLn "a956"
a957 :: IO (); a957 = forever $ putStrLn "a957"
a958 :: IO (); a958 = forever $ putStrLn "a958"
a959 :: IO (); a959 = forever $ putStrLn "a959"
a960 :: IO (); a960 = forever $ putStrLn "a960"
a961 :: IO (); a961 = forever $ putStrLn "a961"
a962 :: IO (); a962 = forever $ putStrLn "a962"
a963 :: IO (); a963 = forever $ putStrLn "a963"
a964 :: IO (); a964 = forever $ putStrLn "a964"
a965 :: IO (); a965 = forever $ putStrLn "a965"
a966 :: IO (); a966 = forever $ putStrLn "a966"
a967 :: IO (); a967 = forever $ putStrLn "a967"
a968 :: IO (); a968 = forever $ putStrLn "a968"
a969 :: IO (); a969 = forever $ putStrLn "a969"
a970 :: IO (); a970 = forever $ putStrLn "a970"
a971 :: IO (); a971 = forever $ putStrLn "a971"
a972 :: IO (); a972 = forever $ putStrLn "a972"
a973 :: IO (); a973 = forever $ putStrLn "a973"
a974 :: IO (); a974 = forever $ putStrLn "a974"
a975 :: IO (); a975 = forever $ putStrLn "a975"
a976 :: IO (); a976 = forever $ putStrLn "a976"
a977 :: IO (); a977 = forever $ putStrLn "a977"
a978 :: IO (); a978 = forever $ putStrLn "a978"
a979 :: IO (); a979 = forever $ putStrLn "a979"
a980 :: IO (); a980 = forever $ putStrLn "a980"
a981 :: IO (); a981 = forever $ putStrLn "a981"
a982 :: IO (); a982 = forever $ putStrLn "a982"
a983 :: IO (); a983 = forever $ putStrLn "a983"
a984 :: IO (); a984 = forever $ putStrLn "a984"
a985 :: IO (); a985 = forever $ putStrLn "a985"
a986 :: IO (); a986 = forever $ putStrLn "a986"
a987 :: IO (); a987 = forever $ putStrLn "a987"
a988 :: IO (); a988 = forever $ putStrLn "a988"
a989 :: IO (); a989 = forever $ putStrLn "a989"
a990 :: IO (); a990 = forever $ putStrLn "a990"
a991 :: IO (); a991 = forever $ putStrLn "a991"
a992 :: IO (); a992 = forever $ putStrLn "a992"
a993 :: IO (); a993 = forever $ putStrLn "a993"
a994 :: IO (); a994 = forever $ putStrLn "a994"
a995 :: IO (); a995 = forever $ putStrLn "a995"
a996 :: IO (); a996 = forever $ putStrLn "a996"
a997 :: IO (); a997 = forever $ putStrLn "a997"
a998 :: IO (); a998 = forever $ putStrLn "a998"
a999 :: IO (); a999 = forever $ putStrLn "a999"
a1000 :: IO (); a1000 = forever $ putStrLn "a1000"


-- Reported by sjcjoosten in T10547, this was taking forever because of a bug in
-- the implementation. See bottom of the file for some notes.

module Test where

type T12 = T11
type T11 = T10
type T10 = T9
type T9  = T8
type T8  = T7
type T7  = T6
type T6  = T5
type T5  = T4
type T4  = T3
type T3  = T2
type T2  = T1
type T1  = T0
type T0  = Int

type S12 = S11
type S11 = S10
type S10 = S9
type S9  = S8
type S8  = S7
type S7  = S6
type S6  = S5
type S5  = S4
type S4  = S3
type S3  = S2
type S2  = S1
type S1  = S0
type S0  = Int

test :: (T12, Char) -> (S12, Bool) -> Int
test a b = const 1 (f a b)

f :: (a, b) -> (a, b) -> (a, b)
f a _ = a

-- 5416fad, before the fix:
--
--    16,990,408,080 bytes allocated in the heap
--        49,762,144 bytes copied during GC
--         4,295,384 bytes maximum residency (5 sample(s))
--           186,272 bytes maximum slop
--                12 MB total memory in use (0 MB lost due to fragmentation)
--
--                                       Tot time (elapsed)  Avg pause  Max pause
--    Gen  0     26929 colls,     0 par    0.779s   0.779s     0.0000s    0.0009s
--    Gen  1         5 colls,     0 par    0.040s   0.040s     0.0080s    0.0099s
--
--    TASKS: 4 (1 bound, 3 peak workers (3 total), using -N1)
--
--    SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)
--
--    INIT    time    0.001s  (  0.001s elapsed)
--    MUT     time    3.409s  (  3.409s elapsed)
--    GC      time    0.819s  (  0.819s elapsed)
--    EXIT    time    0.008s  (  0.012s elapsed)
--    Total   time    4.256s  (  4.240s elapsed)
--
--    Alloc rate    4,984,597,832 bytes per MUT second
--
--    Productivity  80.7% of total user, 81.1% of total elapsed
--
-- After the fix:
--
--        39,165,544 bytes allocated in the heap
--        19,516,400 bytes copied during GC
--         4,460,568 bytes maximum residency (5 sample(s))
--           244,640 bytes maximum slop
--                11 MB total memory in use (0 MB lost due to fragmentation)
--
--                                       Tot time (elapsed)  Avg pause  Max pause
--    Gen  0        44 colls,     0 par    0.009s   0.009s     0.0002s    0.0007s
--    Gen  1         5 colls,     0 par    0.040s   0.040s     0.0080s    0.0099s
--
--    TASKS: 4 (1 bound, 3 peak workers (3 total), using -N1)
--
--    SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)
--
--    INIT    time    0.001s  (  0.001s elapsed)
--    MUT     time    0.009s  (  0.009s elapsed)
--    GC      time    0.049s  (  0.049s elapsed)
--    EXIT    time    0.008s  (  0.012s elapsed)
--    Total   time    0.096s  (  0.070s elapsed)
--
--    Alloc rate    4,570,081,011 bytes per MUT second
--
--    Productivity  48.2% of total user, 65.9% of total elapsed


module T12150 where

data Result a = Success a | Error String

{- 80 guards

   ghc-7.10.3 -O :  0.3s
   ghc-8.0.1 -O  :  1.8s
-}

instance Functor Result where
    {-# INLINE fmap #-}
    fmap | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f

         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f

         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f

         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f

         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f

         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f

         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f

         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f
         | bool = f

      where
        bool = undefined
        f = undefined


{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE GADTs #-}

module Crash where

import Data.Proxy (Proxy(..))
import Data.Type.Equality (type (==))
import Data.Kind
import GHC.Exts
import GHC.Generics

data Dict :: Constraint -> Type where
  Dict :: a => Dict a

infixr 0 -->

type family (args :: [Type]) --> (ret :: Type) :: Type
  where
    '[]           --> ret = ret
    (arg ': args) --> ret = arg -> (args --> ret)

type family AllArguments (func :: Type) :: [Type]
  where
    AllArguments (arg -> func) = arg ': AllArguments func
    AllArguments ret           = '[]

type family FinalReturn (func :: Type) :: Type
  where
    FinalReturn (arg -> func) = FinalReturn func
    FinalReturn ret           = ret

type IsFullFunction f
  = (AllArguments f --> FinalReturn f) ~ f

type family SConstructor (struct :: Type) :: Type
  where
    SConstructor struct = GPrependFields (Rep struct ()) '[] --> struct

type family GPrependFields (gstruct :: Type) (tail :: [Type]) :: [Type]
  where
    GPrependFields (M1  i t f p) tail = GPrependFields (f p) tail
    GPrependFields (K1    i c p) tail = c ': tail
    GPrependFields ((:*:) f g p) tail =
      GPrependFields (f p) (GPrependFields (g p) tail)

class (fields1 --> (fields2 --> r)) ~ (fields --> r)
      => AppendFields fields1 fields2 fields r
         | fields1 fields2 -> fields

instance AppendFields '[] fields fields r

instance AppendFields fields1 fields2 fields r
         => AppendFields (f ': fields1) fields2 (f ': fields) r

class Generic struct
      => GoodConstructor (struct :: Type)
  where
    goodConstructor :: Proxy struct
                    -> Dict ( IsFullFunction (SConstructor struct)
                            , FinalReturn (SConstructor struct) ~ struct
                            )

instance ( Generic struct
         , GoodConstructorEq (SConstructor struct == struct)
                             (SConstructor struct)
                             struct
         ) => GoodConstructor struct
  where
    goodConstructor _ =
        goodConstructorEq (Proxy :: Proxy (SConstructor struct == struct))
                          (Proxy :: Proxy (SConstructor struct))
                          (Proxy :: Proxy struct)
    {-# INLINE goodConstructor #-}

class GoodConstructorEq (isEqual :: Bool) (ctor :: Type) (struct :: Type)
  where
    goodConstructorEq :: Proxy isEqual
                      -> Proxy ctor
                      -> Proxy struct
                      -> Dict ( IsFullFunction ctor
                              , FinalReturn ctor ~ struct
                              )

instance ( FinalReturn struct ~ struct
         , AllArguments struct ~ '[]
         ) => GoodConstructorEq True struct struct
  where
    goodConstructorEq _ _ _ = Dict
    {-# INLINE goodConstructorEq #-}

instance GoodConstructorEq (ctor == struct) ctor struct
         => GoodConstructorEq False (arg -> ctor) struct
  where
    goodConstructorEq _ _ _ =
      case goodConstructorEq (Proxy :: Proxy (ctor == struct))
                             (Proxy :: Proxy ctor)
                             (Proxy :: Proxy struct)
      of
        Dict -> Dict
    {-# INLINE goodConstructorEq #-}

data Foo = Foo
  { _01 :: Int
  , _02 :: Int
  , _03 :: Int
  , _04 :: Int
  , _05 :: Int
  , _06 :: Int
  , _07 :: Int
  , _08 :: Int
  , _09 :: Int
  , _10 :: Int
  , _11 :: Int
  , _12 :: Int
  , _13 :: Int
  , _14 :: Int
  , _15 :: Int
  , _16 :: Int
  }
  deriving (Generic)

crash :: () -> Int
crash p1 = x + y
  where
    p2 = p1  -- This indirection is required to trigger the problem.
    x = fst $ case goodConstructor (Proxy :: Proxy Foo) of
      Dict -> (0, p2)
    y = fst $ case goodConstructor (Proxy :: Proxy Foo) of
      Dict -> (0, p2)
{-# INLINE crash #-}  -- Even 'INLINABLE' is not enough to trigger the problem.


{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE UndecidableInstances #-}
{- # OPTIONS_GHC -O1 #-}

module T12234 () where

import Prelude (Eq)

data ExprF rT = ExprF rT rT deriving Eq

newtype Expr   = Expr (Fix ExprF) deriving Eq
newtype Fix fT = In (fT (Fix fT))

deriving instance Eq (f (Fix f)) => Eq (Fix f)


{-# LANGUAGE KindSignatures #-}

module T12425 where

import Control.Applicative
import Control.Monad
import Control.Monad.Trans.State.Lazy (StateT(..))

data Result a m b = RecurseOnly (Maybe (CondT a m b))
                  | KeepAndRecurse b (Maybe (CondT a m b))

instance Monad m => Functor (Result a m) where
    fmap f (RecurseOnly l)      = RecurseOnly (liftM (fmap f) l)
    fmap f (KeepAndRecurse a l) = KeepAndRecurse (f a) (liftM (fmap f) l)
    {-# INLINE fmap #-}

newtype CondT a m b = CondT (StateT a m (Result a m b))

instance Monad m => Functor (CondT a m) where
    fmap f (CondT g) = CondT (liftM (fmap f) g)
    {-# INLINE fmap #-}

instance Monad m => Applicative (CondT a m) where
    pure  = undefined
    (<*>) = undefined

instance Monad m => Monad (CondT a m) where
    return = undefined
    (>>=) = undefined

-- liftM   :: (Monad m) => (a1 -> r) -> m a1 -> m r


{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE MultiParamTypeClasses #-}

module T12545 where

import T12545a

data A

type instance ElemsOf A = [ T1, T2, T3, T4, T5, T6, T7, T8
                          , T9, T10, T11, T12, T13, T14, T15, T16
                          , T17, T18, T19, T20, T21, T22, T23, T24
                          , T25, T26, T27, T28, T29, T30, T31, T32
                          ]

data T1; instance ElemOf A T1 where
data T2; instance ElemOf A T2 where
data T3; instance ElemOf A T3 where
data T4; instance ElemOf A T4 where
data T5; instance ElemOf A T5 where
data T6; instance ElemOf A T6 where
data T7; instance ElemOf A T7 where
data T8; instance ElemOf A T8 where
data T9; instance ElemOf A T9 where
data T10; instance ElemOf A T10 where
data T11; instance ElemOf A T11 where
data T12; instance ElemOf A T12 where
data T13; instance ElemOf A T13 where
data T14; instance ElemOf A T14 where
data T15; instance ElemOf A T15 where
data T16; instance ElemOf A T16 where
data T17; instance ElemOf A T17 where
data T18; instance ElemOf A T18 where
data T19; instance ElemOf A T19 where
data T20; instance ElemOf A T20 where
data T21; instance ElemOf A T21 where
data T22; instance ElemOf A T22 where
data T23; instance ElemOf A T23 where
data T24; instance ElemOf A T24 where
data T25; instance ElemOf A T25 where
data T26; instance ElemOf A T26 where
data T27; instance ElemOf A T27 where
data T28; instance ElemOf A T28 where
data T29; instance ElemOf A T29 where
data T30; instance ElemOf A T30 where
data T31; instance ElemOf A T31 where
data T32; instance ElemOf A T32 where


{-# LANGUAGE CPP #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}

module T12545a
  ( ElemWitness(..)
  , ElemAt(..)
  , JustElemPath
  , FindElem
  , IsElem
  , ElemOf
  , ElemsOf
  ) where

import Data.Kind (Type)
import Data.Proxy (Proxy(..))

data ElemPath = HeadElem
              | TailElem ElemPath

data MaybeElemPath = NotElem
                   | Elem ElemPath

type family FindElem (p :: ElemPath) (a :: k) (l :: [k]) :: MaybeElemPath where
  FindElem p a (a ': t) = 'Elem p
  FindElem p a (b ': t) = FindElem ('TailElem p) a t
  FindElem p a '[] = 'NotElem

type family JustElemPath (p :: MaybeElemPath) :: ElemPath where
  JustElemPath ('Elem p) = p

data ElemWitness (p :: ElemPath) (a :: k) (l :: [k])  where
  ElemHeadWitness :: ElemWitness 'HeadElem a (a ': t)
  ElemTailWitness :: (ElemAt p a t,
                      FindElem 'HeadElem a (b ': t) ~ 'Elem ('TailElem p))
                  => ElemWitness p a t -> ElemWitness ('TailElem p) a (b ': t)

class (FindElem 'HeadElem a l ~ 'Elem p) => ElemAt p (a :: k) (l :: [k]) where
  elemWitness :: Proxy a -> Proxy l -> ElemWitness p a l

instance ElemAt 'HeadElem a (a ': t) where
  elemWitness _ _ = ElemHeadWitness

instance (ElemAt p a t, FindElem 'HeadElem a (b ': t) ~ 'Elem ('TailElem p))
         => ElemAt ('TailElem p) a (b ': t) where
  elemWitness pa _ = ElemTailWitness (elemWitness pa (Proxy :: Proxy t))

type IsElem a l = ElemAt (JustElemPath (FindElem 'HeadElem a l)) a l

class IsElem t (ElemsOf a) => ElemOf a t where

type family ElemsOf a :: [Type]


{-# LANGUAGE DeriveGeneric, DeriveDataTypeable, DefaultSignatures, FlexibleContexts, TypeOperators #-}
module SpeedTest (Bar (..), Foo0 (..), Foo1 (..), Foo2 (..), Foo3 (..)) where

import GHC.Generics
import Data.Typeable (Typeable)

-------------------------------------------------------------------------------
-- Generic class
-------------------------------------------------------------------------------

class Bar a where
    bar :: a -> [String]
    bar x = bar' x []

    bar' :: a -> [String] -> [String]
    default bar' :: (Generic a, GBar (Rep a)) => a -> [String] -> [String]
    bar' x = gbar (from x)

class GBar f where
    gbar :: f a -> [String] -> [String]

instance (GBar a, GBar b) => GBar (a :*: b) where
    gbar (a :*: b) = gbar a . gbar b

instance GBar a => GBar (M1 i c a) where
    gbar (M1 x) = gbar x

instance Bar a => GBar (K1 i a) where
    gbar (K1 x) = bar' x

instance Bar a => Bar [a] where
    bar' = foldr (.) id . map bar'

instance Bar a => Bar (Maybe a) where
    bar' = maybe id bar'

instance Bar Bool where
    bar' = (:) . show

instance Bar Char where
    bar' = (:) . show

instance Bar Int where
    bar' = (:) . show

-------------------------------------------------------------------------------
-- Another generic class
-------------------------------------------------------------------------------

class Quu a where
    quu :: a -> [String]
    quu x = quu' x []

    quu' :: a -> [String] -> [String]
    default quu' :: (Generic a, GQuu (Rep a)) => a -> [String] -> [String]
    quu' x = gquu (from x)

class GQuu f where
    gquu :: f a -> [String] -> [String]

instance (GQuu a, GQuu b) => GQuu (a :*: b) where
    gquu (a :*: b) = gquu a . gquu b

instance GQuu a => GQuu (M1 i c a) where
    gquu (M1 x) = gquu x

instance Quu a => GQuu (K1 i a) where
    gquu (K1 x) = quu' x

instance Quu a => Quu [a] where
    quu' = foldr (.) id . map quu'

instance Quu a => Quu (Maybe a) where
    quu' = maybe id quu'

instance Quu Bool where
    quu' = (:) . show

instance Quu Char where
    quu' = (:) . show

instance Quu Int where
    quu' = (:) . show

-------------------------------------------------------------------------------
-- Data
-------------------------------------------------------------------------------

data Foo0 = Foo0
    { foo0Field00 :: !String -- Should really have Text
    , foo0Field01 :: !Int
    , foo0Field02 :: ![Int]
    , foo0Field03 :: !(Maybe Bool)
    , foo0Field04 :: !Bool
    , foo0Field05 :: !String
    , foo0Field06 :: !Int
    , foo0Field07 :: ![Int]
    , foo0Field08 :: !(Maybe Bool)
    , foo0Field09 :: !Bool
    , foo0Field10 :: !String
    , foo0Field11 :: !Int
    , foo0Field12 :: ![Int]
    , foo0Field13 :: !(Maybe Bool)
    , foo0Field14 :: !Bool
    , foo0Field15 :: !String
    , foo0Field16 :: !Int
    , foo0Field17 :: ![Int]
    , foo0Field18 :: !(Maybe Bool)
    , foo0Field19 :: !Bool
    }
  deriving (Eq, Ord, Show, Typeable, Generic)

instance Bar Foo0
instance Quu Foo0

data Foo1 = Foo1
    { foo1Field00 :: !String -- Should really have Text
    , foo1Field01 :: !Int
    , foo1Field02 :: ![Int]
    , foo1Field03 :: !(Maybe Bool)
    , foo1Field04 :: !Bool
    , foo1Field05 :: !String
    , foo1Field06 :: !Int
    , foo1Field07 :: ![Int]
    , foo1Field08 :: !(Maybe Bool)
    , foo1Field09 :: !Bool
    , foo1Field10 :: !String
    , foo1Field11 :: !Int
    , foo1Field12 :: ![Int]
    , foo1Field13 :: !(Maybe Bool)
    , foo1Field14 :: !Bool
    , foo1Field15 :: !String
    , foo1Field16 :: !Int
    , foo1Field17 :: ![Int]
    , foo1Field18 :: !(Maybe Bool)
    , foo1Field19 :: !Bool
    }
  deriving (Eq, Ord, Show, Typeable, Generic)

instance Bar Foo1
instance Quu Foo1

data Foo2 = Foo2
    { foo2Field00 :: !String -- Should really have Text
    , foo2Field01 :: !Int
    , foo2Field02 :: ![Int]
    , foo2Field03 :: !(Maybe Bool)
    , foo2Field04 :: !Bool
    , foo2Field05 :: !String
    , foo2Field06 :: !Int
    , foo2Field07 :: ![Int]
    , foo2Field08 :: !(Maybe Bool)
    , foo2Field09 :: !Bool
    , foo2Field10 :: !String
    , foo2Field11 :: !Int
    , foo2Field12 :: ![Int]
    , foo2Field13 :: !(Maybe Bool)
    , foo2Field14 :: !Bool
    , foo2Field15 :: !String
    , foo2Field16 :: !Int
    , foo2Field17 :: ![Int]
    , foo2Field18 :: !(Maybe Bool)
    , foo2Field19 :: !Bool
    }
  deriving (Eq, Ord, Show, Typeable, Generic)

instance Bar Foo2
instance Quu Foo2

data Foo3 = Foo3
    { foo3Field00 :: !String -- Should really have Text
    , foo3Field01 :: !Int
    , foo3Field02 :: ![Int]
    , foo3Field03 :: !(Maybe Bool)
    , foo3Field04 :: !Bool
    , foo3Field05 :: !String
    , foo3Field06 :: !Int
    , foo3Field07 :: ![Int]
    , foo3Field08 :: !(Maybe Bool)
    , foo3Field09 :: !Bool
    , foo3Field10 :: !String
    , foo3Field11 :: !Int
    , foo3Field12 :: ![Int]
    , foo3Field13 :: !(Maybe Bool)
    , foo3Field14 :: !Bool
    , foo3Field15 :: !String
    , foo3Field16 :: !Int
    , foo3Field17 :: ![Int]
    , foo3Field18 :: !(Maybe Bool)
    , foo3Field19 :: !Bool
    }
  deriving (Eq, Ord, Show, Typeable, Generic)

instance Bar Foo3
instance Quu Foo3


{-# LANGUAGE PolyKinds, DataKinds, TypeOperators, TypeFamilies,
             GADTs, PartialTypeSignatures #-}

module T13035 where

import Data.Kind

newtype MyAttr a b = MyAttr { _unMyAttr :: MyFun (a b) }
type MyRec a b = Rec (MyAttr a) b

type family MyFun (a :: k1) :: k2

data GY (a :: k1) (b :: k2) (c :: k1 -> k3) (d :: k1)
data GNone (a :: k1)

type family GYTF a where
    GYTF (GY a b _ a) = b
    GYTF (GY _ _ c d) = MyFun (c d)

type instance MyFun (GY a b c d) = GYTF (GY a b c d)

type family GNoneTF (a :: k1) :: k2 where

type instance MyFun (GNone a) = GNoneTF a

type (a :: k1) =: (b :: k2) = a `GY` b
type (a :: j1 -> j2) $ (b :: j1) = a b

infixr 0 $
infixr 9 =:

data FConst (a :: Type) (b :: Fields)
data FApply (a :: Type -> Type -> Type) b c (d :: Fields)
data FMap (a :: Type -> Type) b (d :: Fields)

type instance MyFun (FConst a b) = a
type instance MyFun (FApply b c d a) = b (MyFun (c a)) (MyFun (d a))
type instance MyFun (FMap b c a) = b (MyFun (c a))

data Fields = Name
            | Author
            | Image
            | Description
            | Ingredients
            | Instructions
            | CookTime
            | PrepTime
            | TotalTime
            | Yield
            | Nutrition
            | Tags
            | Url
            | Section
            | Items
            | Subsections
            | Calories
            | Carbohydrates
            | Cholesterol
            | Fat
            | Fiber
            | Protien
            | SaturatedFat
            | Sodium
            | Sugar
            | TransFat
            | UnsaturatedFat
            | ServingSize

data Rec :: (u -> Type) -> [u] -> Type where
  RNil :: Rec f '[]
  (:&) :: !(f r) -> !(Rec f rs) -> Rec f (r ': rs)

data family Sing (a :: k)
data instance Sing (z_a6bn :: Fields)
      = z_a6bn ~ Name => SName |
        z_a6bn ~ Author => SAuthor |
        z_a6bn ~ Image => SImage |
        z_a6bn ~ Description => SDescription |
        z_a6bn ~ Ingredients => SIngredients |
        z_a6bn ~ Instructions => SInstructions |
        z_a6bn ~ CookTime => SCookTime |
        z_a6bn ~ PrepTime => SPrepTime |
        z_a6bn ~ TotalTime => STotalTime |
        z_a6bn ~ Yield => SYield |
        z_a6bn ~ Nutrition => SNutrition |
        z_a6bn ~ Tags => STags |
        z_a6bn ~ Url => SUrl |
        z_a6bn ~ Section => SSection |
        z_a6bn ~ Items => SItems |
        z_a6bn ~ Subsections => SSubsections |
        z_a6bn ~ Calories => SCalories |
        z_a6bn ~ Carbohydrates => SCarbohydrates |
        z_a6bn ~ Cholesterol => SCholesterol |
        z_a6bn ~ Fat => SFat |
        z_a6bn ~ Fiber => SFiber |
        z_a6bn ~ Protien => SProtien |
        z_a6bn ~ SaturatedFat => SSaturatedFat |
        z_a6bn ~ Sodium => SSodium |
        z_a6bn ~ Sugar => SSugar |
        z_a6bn ~ TransFat => STransFat |
        z_a6bn ~ UnsaturatedFat => SUnsaturatedFat |
        z_a6bn ~ ServingSize => SServingSize

(=::) :: sing f -> MyFun (a f) -> MyAttr a f
_ =:: x = MyAttr x

type NutritionT
    = Calories       =: Maybe Int
    $ Carbohydrates  =: Maybe Int
    $ Cholesterol    =: Maybe Int
    $ Fat            =: Maybe Int
    $ Fiber          =: Maybe Int
    $ Protien        =: Maybe Int
    $ SaturatedFat   =: Maybe Int
    $ Sodium         =: Maybe Int
    $ Sugar          =: Maybe Int
    $ TransFat       =: Maybe Int
    $ UnsaturatedFat =: Maybe Int
    $ ServingSize    =: String
    $ GNone

type NutritionRec = MyRec NutritionT ['Calories, 'Carbohydrates,
                                      'Cholesterol, 'Fat, 'Fiber,
                                      'Protien, 'SaturatedFat, 'Sodium,
                                      'Sugar, 'TransFat, 'UnsaturatedFat,
                                      'ServingSize]

type RecipeT
    = Name         =: String
    $ Author       =: String
    $ Image        =: String
    $ Description  =: String
    $ CookTime     =: Maybe Int
    $ PrepTime     =: Maybe Int
    $ TotalTime    =: Maybe Int
    $ Yield        =: String
    $ Nutrition    =: NutritionRec
    $ Tags         =: [String]
    $ Url          =: String
    $ GNone

type RecipeFormatter = FApply (->) (FConst [String]) (FMap IO RecipeT)

g :: MyRec RecipeFormatter _ --'[ 'Author ] Uncomment to prevent loop
g = SAuthor =:: (\a -> return "Hi")
    :& RNil


{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE RoleAnnotations #-}

module Bug where
import Data.Typeable
import GHC.Generics
import Data.Data

data Condition v = Condition
    deriving (Functor, Foldable)
-- We don't want the phantom optimization to kick
-- in here and confuse the test.
type role Condition representational

data CondTree v c a = CondNode
    { condTreeData        :: a
    , condTreeConstraints :: c
    , condTreeComponents  :: [CondBranch v c a]
    }
    deriving (Functor, Foldable)

data CondBranch v c a = CondBranch
    { condBranchCondition :: Condition v
    , condBranchIfTrue    :: CondTree v c a
    , condBranchIfFalse   :: Maybe (CondTree v c a)
    }
    deriving (Functor, Foldable)