packages feed

fay-0.19: tests/RecDecl.hs

module RecDecl where

import           FFI

data R = R { i :: Double, c :: Char }
data S = S Double Char

-- RecDecl
r1 :: R
r1 = R { i = 1, c = 'a' }

-- RecDecl with fields out of order
r2 :: R
r2 = R { c = 'b', i = 2 }

-- Partial RecDecl (Produces GHC warning)
r' :: R
r' = R { c = 'b' }

-- Regular application
r3 :: R
r3 = R 3 'c'

-- Using regular constructor
s1 :: S
s1 = S 1 'a'

-- Multiple fields with the same type
data X = X { _x1, _x2 :: Int }

x1 = X 1 2
x2 = X { _x1 = 1, _x2 = 2 }

-- Record updates
r1' = r1{ i = 10 }
r2' = r2{ c = 'a', i = 20 }
r'' = r'{ i = 123 }

main = do
  -- print updated records first to show that old records are preserved
  print r1'
  print r2'
  print r''

  print r1
  putStrLn (show (i r1))
  putStrLn (show (c r1))
  print r2
  print r'
  print r3
  print s1
  print x1
  print x2