packages feed

haskell-debugger-0.12.2.0: test/golden/T164/Main.hs

{-# LANGUAGE GADTs, ImplicitParams #-}
{-# LANGUAGE BangPatterns #-}

module Main where

import Data.Word

data Foo where
  Foo :: Show a => a -> Foo

data Foo2 where
  Foo2 :: Show a => { foo :: a }-> Foo2

data Foo3 where
  Foo3 :: Int -> {-# UNPACK #-} !Word -> !Int -> !Int -> Foo3

data Foo4 = Foo4 !Word32 !Word16 !Word64 !Word16

instance Show Foo where
  show (Foo a) = show a

data Foo5 where
  Foo5 :: (?impl :: String) => String -> Foo5

mkFoo :: Foo
mkFoo = Foo $! ("value" :: String)

mkFoo2 :: Foo2
mkFoo2 = Foo2 $! ("value2" :: String)

mkFoo5 :: Foo5
mkFoo5 = let ?impl = "bob" in Foo5 "alice"


inspectFoo :: IO ()
inspectFoo = do
  let !existentialFoo = mkFoo
  let !existentialFoo2 = mkFoo2
  let !foo3 = Foo3 0 1 2 3
  let !foo4 = Foo4 0 1 2 3
  let !foo5 = mkFoo5
  const (pure ()) (existentialFoo, existentialFoo2, foo3, foo4, foo5)
  case existentialFoo of
    Foo inner -> putStrLn (show inner)

main :: IO ()
main = inspectFoo