Type Holes

TypeHoles demo.

Note that this program runs, and prints a type error when a hole _ is encountered at runtime.

Code copied from haskell.org/haskellwiki/GHC/TypeHoles

To run in IDE, after opening in IDE, go to Settings (hamburger icon in top-right) and set

  • Environment: GHC 7.8
  • Compiler flags: -fdefer-type-errors
{-# LANGUAGE TypeHoles #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE UndecidableInstances #-}

module FreeMonad where

-- Please go to Settings (hamburger icon in top-right) and set
-- Environment: GHC 7.8
-- Compiler flags: -fdefer-type-errors
 
data Free f a
  = Pure a
  | Free (f (Free f a))
 
instance Functor f => Monad (Free f) where
  return a     = Pure a
  Pure a >>= f = f a
  Free f >>= g = Free _ -- Hole!

instance Show (f (Free f a)) => Show (Free f a) where
  show (Free x) = show x

 
demo :: Free [] String
demo = Free [] >>= return


main :: IO ()
main =  print demo  -- Fails with type error at runtime, since `demo` tries to call `_`