packages feed

ghc-exactprint-0.5.3.1: tests/examples/ghc80/ado004.hs

{-# LANGUAGE ApplicativeDo #-}
{-# OPTIONS_GHC -ddump-types #-}
module Test where

-- This is a do expression that typechecks with only an Applicative constraint
test1 :: Applicative f => (Int -> f Int) -> f Int
test1 f = do
  x <- f 3
  y <- f 4
  return (x + y)

-- Test we can also infer the Applicative version of the type
test2 f = do
  x <- f 3
  y <- f 4
  return (x + y)

-- This one will use join
test3 f g = do
  x <- f 3
  y <- f 4
  g y x

-- This one needs a tuple
test4 f g = do
  x <- f 3
  y <- f 4
  let r = g y x
  r

-- This one used to need a big tuple, now it compiles to ApplicativeLastStmt
test5 f g = do
  x01 <- f 01
  x02 <- f 02
  x03 <- f 03
  x04 <- f 04
  x05 <- f 05
  x06 <- f 06
  x07 <- f 07
  x08 <- f 08
  x09 <- f 09
  x11 <- f 11
  x12 <- f 12
  x13 <- f 13
  x14 <- f 14
  x15 <- f 15
  x16 <- f 16
  x17 <- f 17
  x18 <- f 18
  x19 <- f 19
  x20 <- f 20
  x21 <- f 21
  x22 <- f 22
  x23 <- f 23
  x24 <- f 24
  x25 <- f 25
  x26 <- f 26
  x27 <- f 27
  x28 <- f 28
  x29 <- f 29
  x30 <- f 30
  x31 <- f 31
  x32 <- f 32
  x33 <- f 33
  x34 <- f 34
  x35 <- f 35
  x36 <- f 36
  x37 <- f 37
  x38 <- f 38
  x39 <- f 39
  x40 <- f 40
  x41 <- f 41
  x42 <- f 42
  x43 <- f 43
  x44 <- f 44
  x45 <- f 45
  x46 <- f 46
  x47 <- f 47
  x48 <- f 48
  x49 <- f 49
  x50 <- f 50
  x51 <- f 51
  x52 <- f 52
  x53 <- f 53
  x54 <- f 54
  x55 <- f 55
  x56 <- f 56
  x57 <- f 57
  x58 <- f 58
  x59 <- f 59
  x60 <- f 60
  x61 <- f 61
  x62 <- f 62
  x63 <- f 63
  x64 <- f 64
  x65 <- f 65
  x66 <- f 66
  x67 <- f 67
  x68 <- f 68
  x69 <- f 69
  x70 <- f 70
  let r = g x70 x01
  r

-- This one needs a big tuple
test6 f g = do
  x01 <- f 01
  x02 <- f 02
  x03 <- f 03
  x04 <- f 04
  x05 <- f 05
  x06 <- f 06
  x07 <- f 07
  x08 <- f 08
  x09 <- f 09
  x11 <- f 11
  x12 <- f 12
  x13 <- f 13
  x14 <- f 14
  x15 <- f 15
  x16 <- f 16
  x17 <- f 17
  x18 <- f 18
  x19 <- f 19
  x20 <- f 20
  x21 <- f 21
  x22 <- f 22
  x23 <- f 23
  x24 <- f 24
  x25 <- f 25
  x26 <- f 26
  x27 <- f 27
  x28 <- f 28
  x29 <- f 29
  x30 <- f 30
  x31 <- f 31
  x32 <- f 32
  x33 <- f 33
  x34 <- f 34
  x35 <- f 35
  x36 <- f 36
  x37 <- f 37
  x38 <- f 38
  x39 <- f 39
  x40 <- f 40
  x41 <- f 41
  x42 <- f 42
  x43 <- f 43
  x44 <- f 44
  x45 <- f 45
  x46 <- f 46
  x47 <- f 47
  x48 <- f 48
  x49 <- f 49
  x50 <- f 50
  x51 <- f 51
  x52 <- f 52
  x53 <- f 53
  x54 <- f 54
  x55 <- f 55
  x56 <- f 56
  x57 <- f 57
  x58 <- f 58
  x59 <- f 59
  x60 <- f 60
  x61 <- f 61
  x62 <- f 62
  x63 <- f 63
  x64 <- f 64
  x65 <- f 65
  x66 <- f 66
  x67 <- f 67
  x68 <- f 68
  x69 <- f 69
  x70 <- f x01
  x71 <- f 70
  x71 `const`
   [ x01
   , x02
   , x03
   , x04
   , x05
   , x06
   , x07
   , x08
   , x09
   , x11
   , x12
   , x13
   , x14
   , x15
   , x16
   , x17
   , x18
   , x19
   , x20
   , x21
   , x22
   , x23
   , x24
   , x25
   , x26
   , x27
   , x28
   , x29
   , x30
   , x31
   , x32
   , x33
   , x34
   , x35
   , x36
   , x37
   , x38
   , x39
   , x40
   , x41
   , x42
   , x43
   , x44
   , x45
   , x46
   , x47
   , x48
   , x49
   , x50
   , x51
   , x52
   , x53
   , x54
   , x55
   , x56
   , x57
   , x58
   , x59
   , x60
   , x61
   , x62
   , x63
   , x64
   , x65
   , x66
   , x67
   , x68
   , x69
   , x70
   , x71 ]