tritlo@nietzsche:~/Haskell2018$ ghci
GHCi, version 8.6.1: http://www.haskell.org/ghc/  :? for help
Loaded package environment from /home/tritlo/Haskell2018/.ghc.environment.x86_64-linux-8.6.1
Loaded GHCi configuration from /home/tritlo/Haskell2018/.ghci
λ> ( _ "hello") :: [String]

<interactive>:1:3: error:
    • Found hole: _ :: [Char] -> [String]
    • In the expression: _
      In the expression: (_ "hello") :: [String]
      In an equation for ‘it’: it = (_ "hello") :: [String]
    • Relevant bindings include
        it :: [String] (bound at <interactive>:1:1)
      Valid hole fits include
        lines :: String -> [String]
        words :: String -> [String]
        repeat :: forall a. a -> [a]
          with a ~ String
        fail :: forall (m :: * -> *) a. Monad m => String -> m a
          with m ~ [], a ~ String
        return :: forall (m :: * -> *) a. Monad m => a -> m a
          with m ~ [], a ~ String
        pure :: forall (f :: * -> *) a. Applicative f => a -> f a
          with f ~ [], a ~ String
        (Some hole fits suppressed; use -fmax-valid-hole-fits=N or -fno-max-valid-hole-fits)
(0.14 secs,)
λ> :!color Lens.hs 
-- Just to make sure this is off, in case I forget :)
{-# OPTIONS_GHC -frefinement-level-hole-fits=0 #-}
import Control.Lens
import Control.Monad.State

newtype T = T { _v :: Int }

val :: Lens' T Int
val f (T i) = T <$> f i

updT :: T -> T
updT t = t &~ do
  val `_` (1 :: Int)
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> :load Lens.hs 
[1 of 1] Compiling Main             ( Lens.hs, interpreted )

Lens.hs:13:3: error:
    • Ambiguous type variable ‘f0’ arising from a use of ‘val’
      prevents the constraint ‘(Functor f0)’ from being solved.
      Probable fix: use a type annotation to specify what ‘f0’ should be.
      These potential instances exist:
        instance Functor (Either a) -- Defined in ‘Data.Either’
        instance Functor Identity -- Defined in ‘Data.Functor.Identity’
        instance Functor IO -- Defined in ‘GHC.Base’
        ...plus 14 others
        ...plus 154 instances involving out-of-scope types
        (use -fprint-potential-instances to see them all)
    • In the first argument of ‘_’, namely ‘val’
      In a stmt of a 'do' block: val `_` (1 :: Int)
      In the second argument of ‘(&~)’, namely ‘do val `_` (1 :: Int)’
   |
13 |   val `_` (1 :: Int)
   |   ^^^

Lens.hs:13:7: error:
    • Found hole:
        _ :: ((Int -> f0 Int) -> T -> f0 T) -> Int -> State T a0
      Where: ‘f0’ is an ambiguous type variable
             ‘a0’ is an ambiguous type variable
    • In the expression: _
      In a stmt of a 'do' block: val `_` (1 :: Int)
      In the second argument of ‘(&~)’, namely ‘do val `_` (1 :: Int)’
    • Relevant bindings include
        t :: T (bound at Lens.hs:12:6)
        updT :: T -> T (bound at Lens.hs:12:1)
      Valid hole fits include
        (#=) :: forall s (m :: * -> *) a b.
                MonadState s m =>
                ALens s s a b -> b -> m ()
          with s ~ T, m ~ (StateT T Identity), a ~ Int, b ~ Int
        (<#=) :: forall s (m :: * -> *) a b.
                 MonadState s m =>
                 ALens s s a b -> b -> m b
          with s ~ T, m ~ (StateT T Identity), a ~ Int, b ~ Int
        (<*=) :: forall s (m :: * -> *) a.
                 (MonadState s m, Num a) =>
                 LensLike' ((,) a) s a -> a -> m a
          with s ~ T, m ~ (StateT T Identity), a ~ Int
        (<+=) :: forall s (m :: * -> *) a.
                 (MonadState s m, Num a) =>
                 LensLike' ((,) a) s a -> a -> m a
          with s ~ T, m ~ (StateT T Identity), a ~ Int
        (<-=) :: forall s (m :: * -> *) a.
                 (MonadState s m, Num a) =>
                 LensLike' ((,) a) s a -> a -> m a
          with s ~ T, m ~ (StateT T Identity), a ~ Int
        (<<*=) :: forall s (m :: * -> *) a.
                  (MonadState s m, Num a) =>
                  LensLike' ((,) a) s a -> a -> m a
          with s ~ T, m ~ (StateT T Identity), a ~ Int
        (Some hole fits suppressed; use -fmax-valid-hole-fits=N or -fno-max-valid-hole-fits)
   |
13 |   val `_` (1 :: Int)
   |       ^^^
Failed, no modules loaded.
(0.76 secs,)
λ> _ :: [a] -> a

<interactive>:12:1: error:
    • Found hole: _ :: [a1] -> a1
      Where: ‘a1’ is a rigid type variable bound by
               an expression type signature:
                 forall a1. [a1] -> a1
               at <interactive>:12:6-13
    • In the expression: _ :: [a] -> a
      In an equation for ‘it’: it = _ :: [a] -> a
    • Relevant bindings include
        it :: [a] -> a (bound at <interactive>:12:1)
      Valid hole fits include
        head :: forall a. [a] -> a
          with a ~ a1
        last :: forall a. [a] -> a
          with a ~ a1
(0.17 secs,)
λ> 
λ> 
λ> _ :: Num a => [a] -> a

<interactive>:15:1: error:
    • Found hole: _ :: [a1] -> a1
      Where: ‘a1’ is a rigid type variable bound by
               an expression type signature:
                 forall a1. Num a1 => [a1] -> a1
               at <interactive>:15:6-22
    • In the expression: _ :: Num a => [a] -> a
      In an equation for ‘it’: it = _ :: Num a => [a] -> a
    • Relevant bindings include
        it :: [a] -> a (bound at <interactive>:15:1)
      Constraints include
        Num a1 (from <interactive>:15:6-22)
        Num a (from <interactive>:15:1-22)
      Valid hole fits include
        head :: forall a. [a] -> a
          with a ~ a1
        last :: forall a. [a] -> a
          with a ~ a1
        product :: forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
          with t ~ [], a ~ a1
        sum :: forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
          with t ~ [], a ~ a1
(0.17 secs,)
λ> 
λ> 
λ> 
λ> 
λ> _ :: Ord a => [a] -> a

<interactive>:20:1: error:
    • Found hole: _ :: [a1] -> a1
      Where: ‘a1’ is a rigid type variable bound by
               an expression type signature:
                 forall a1. Ord a1 => [a1] -> a1
               at <interactive>:20:6-22
    • In the expression: _ :: Ord a => [a] -> a
      In an equation for ‘it’: it = _ :: Ord a => [a] -> a
    • Relevant bindings include
        it :: [a] -> a (bound at <interactive>:20:1)
      Constraints include
        Ord a1 (from <interactive>:20:6-22)
        Ord a (from <interactive>:20:1-22)
      Valid hole fits include
        head :: forall a. [a] -> a
          with a ~ a1
        last :: forall a. [a] -> a
          with a ~ a1
        maximum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
          with t ~ [], a ~ a1
        minimum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
          with t ~ [], a ~ a1
(0.14 secs,)
λ> 
λ> 
λ> 
λ> 
λ> _ :: [Int] -> Int

<interactive>:25:1: error:
    • Found hole: _ :: [Int] -> Int
    • In the expression: _ :: [Int] -> Int
      In an equation for ‘it’: it = _ :: [Int] -> Int
    • Relevant bindings include
        it :: [Int] -> Int (bound at <interactive>:25:1)
      Valid hole fits include
        head :: forall a. [a] -> a
          with a ~ Int
        last :: forall a. [a] -> a
          with a ~ Int
        length :: forall (t :: * -> *) a. Foldable t => t a -> Int
          with t ~ [], a ~ Int
        maximum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
          with t ~ [], a ~ Int
        minimum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
          with t ~ [], a ~ Int
        product :: forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
          with t ~ [], a ~ Int
        (Some hole fits suppressed; use -fmax-valid-hole-fits=N or -fno-max-valid-hole-fits)
(0.08 secs,)
λ> 
λ> 
λ> 
λ> :set -frefinement-level-hole-fits=1
λ> 
λ> 
λ> 
λ> _ :: [Int] -> Int

<interactive>:33:1: error:
    • Found hole: _ :: [Int] -> Int
    • In the expression: _ :: [Int] -> Int
      In an equation for ‘it’: it = _ :: [Int] -> Int
    • Relevant bindings include
        it :: [Int] -> Int (bound at <interactive>:33:1)
      Valid hole fits include
        head :: forall a. [a] -> a
          with a ~ Int
        last :: forall a. [a] -> a
          with a ~ Int
        length :: forall (t :: * -> *) a. Foldable t => t a -> Int
          with t ~ [], a ~ Int
        maximum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
          with t ~ [], a ~ Int
        minimum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
          with t ~ [], a ~ Int
        product :: forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
          with t ~ [], a ~ Int
        (Some hole fits suppressed; use -fmax-valid-hole-fits=N or -fno-max-valid-hole-fits)
      Valid refinement hole fits include
        foldl1 (_ :: Int -> Int -> Int)
          where foldl1 :: forall (t :: * -> *) a.
                          Foldable t =>
                          (a -> a -> a) -> t a -> a
          with t ~ [], a ~ Int
        foldr1 (_ :: Int -> Int -> Int)
          where foldr1 :: forall (t :: * -> *) a.
                          Foldable t =>
                          (a -> a -> a) -> t a -> a
          with t ~ [], a ~ Int
        const (_ :: Int)
          where const :: forall a b. a -> b -> a
          with a ~ Int, b ~ [Int]
        ($) (_ :: [Int] -> Int)
          where ($) :: forall a b. (a -> b) -> a -> b
          with r ~ 'GHC.Types.LiftedRep, a ~ [Int], b ~ Int
        fail (_ :: String)
          where fail :: forall (m :: * -> *) a. Monad m => String -> m a
          with m ~ ((->) [Int]), a ~ Int
        return (_ :: Int)
          where return :: forall (m :: * -> *) a. Monad m => a -> m a
          with m ~ ((->) [Int]), a ~ Int
        (Some refinement hole fits suppressed; use -fmax-refinement-hole-fits=N or -fno-max-refinement-hole-fits)
(0.17 secs,)
λ> :set -frefinement-level-hole-fits=2
λ> _ :: [Int] -> Int

<interactive>:35:1: error:
    • Found hole: _ :: [Int] -> Int
    • In the expression: _ :: [Int] -> Int
      In an equation for ‘it’: it = _ :: [Int] -> Int
    • Relevant bindings include
        it :: [Int] -> Int (bound at <interactive>:35:1)
      Valid hole fits include
        head :: forall a. [a] -> a
          with a ~ Int
        last :: forall a. [a] -> a
          with a ~ Int
        length :: forall (t :: * -> *) a. Foldable t => t a -> Int
          with t ~ [], a ~ Int
        maximum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
          with t ~ [], a ~ Int
        minimum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
          with t ~ [], a ~ Int
        product :: forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
          with t ~ [], a ~ Int
        (Some hole fits suppressed; use -fmax-valid-hole-fits=N or -fno-max-valid-hole-fits)
      Valid refinement hole fits include
        foldl1 (_ :: Int -> Int -> Int)
          where foldl1 :: forall (t :: * -> *) a.
                          Foldable t =>
                          (a -> a -> a) -> t a -> a
          with t ~ [], a ~ Int
        foldr1 (_ :: Int -> Int -> Int)
          where foldr1 :: forall (t :: * -> *) a.
                          Foldable t =>
                          (a -> a -> a) -> t a -> a
          with t ~ [], a ~ Int
        foldl (_ :: Int -> Int -> Int) (_ :: Int)
          where foldl :: forall (t :: * -> *) b a.
                         Foldable t =>
                         (b -> a -> b) -> b -> t a -> b
          with t ~ [], b ~ Int, a ~ Int
        foldr (_ :: Int -> Int -> Int) (_ :: Int)
          where foldr :: forall (t :: * -> *) a b.
                         Foldable t =>
                         (a -> b -> b) -> b -> t a -> b
          with t ~ [], a ~ Int, b ~ Int
        const (_ :: Int)
          where const :: forall a b. a -> b -> a
          with a ~ Int, b ~ [Int]
        ($) (_ :: [Int] -> Int)
          where ($) :: forall a b. (a -> b) -> a -> b
          with r ~ 'GHC.Types.LiftedRep, a ~ [Int], b ~ Int
        (Some refinement hole fits suppressed; use -fmax-refinement-hole-fits=N or -fno-max-refinement-hole-fits)
(0.27 secs,)
λ> :set -fre
-freduction-depth             -fregs-graph                  -freverse-errors
-frefinement-level-hole-fits  -fregs-iterative
λ> :set -frefinement-level-hole-fits=0
λ> :!color Richard.hs 
{-# LANGUAGE ScopedTypeVariables #-}
module Richard where

prefix :: forall a . a -> [[a]] -> [[a]]
prefix x yss = map _a yss
  where xcons :: [a] -> [a]
        xcons ys = _a : ys
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> :load Richard.hs 
[1 of 1] Compiling Richard          ( Richard.hs, interpreted )

Richard.hs:5:20: error:
    • Found hole: _a :: [a] -> [a]
      Where: ‘a’ is a rigid type variable bound by
               the type signature for:
                 prefix :: forall a. a -> [[a]] -> [[a]]
               at Richard.hs:4:1-40
      Or perhaps ‘_a’ is mis-spelled, or not in scope
    • In the first argument of ‘map’, namely ‘_a’
      In the expression: map _a yss
      In an equation for ‘prefix’:
          prefix x yss
            = map _a yss
            where
                xcons :: [a] -> [a]
                xcons ys = _a : ys
    • Relevant bindings include
        xcons :: [a] -> [a] (bound at Richard.hs:7:9)
        yss :: [[a]] (bound at Richard.hs:5:10)
        x :: a (bound at Richard.hs:5:8)
        prefix :: a -> [[a]] -> [[a]] (bound at Richard.hs:5:1)
      Valid hole fits include
        xcons :: [a] -> [a]
        cycle :: forall a. [a] -> [a]
          with a ~ a
        init :: forall a. [a] -> [a]
          with a ~ a
        reverse :: forall a. [a] -> [a]
          with a ~ a
        tail :: forall a. [a] -> [a]
          with a ~ a
        id :: forall a. a -> a
          with a ~ [a]
        (Some hole fits suppressed; use -fmax-valid-hole-fits=N or -fno-max-valid-hole-fits)
  |
5 | prefix x yss = map _a yss
  |                    ^^

Richard.hs:7:20: error:
    • Found hole: _a :: a
      Where: ‘a’ is a rigid type variable bound by
               the type signature for:
                 prefix :: forall a. a -> [[a]] -> [[a]]
               at Richard.hs:4:1-40
      Or perhaps ‘_a’ is mis-spelled, or not in scope
    • In the first argument of ‘(:)’, namely ‘_a’
      In the expression: _a : ys
      In an equation for ‘xcons’: xcons ys = _a : ys
    • Relevant bindings include
        ys :: [a] (bound at Richard.hs:7:15)
        xcons :: [a] -> [a] (bound at Richard.hs:7:9)
        yss :: [[a]] (bound at Richard.hs:5:10)
        x :: a (bound at Richard.hs:5:8)
        prefix :: a -> [[a]] -> [[a]] (bound at Richard.hs:5:1)
      Valid hole fits include x :: a
  |
7 |         xcons ys = _a : ys
  |                    ^^
Failed, no modules loaded.
(0.13 secs,)
λ> :!color Sorting.hs 
{-# LANGUAGE TypeInType, TypeOperators, TypeFamilies, TypeApplications #-}
module Sorting ( mergeSort, quickSort, insertionSort
               , Sorted, runSort, module ONotation) where

import ONotation
import Data.Type.Bool
import Data.Type.Equality
import Data.List (insert, sort, partition, foldl')

-- Sorted encodes average computational and auxiliary memory complexity.
-- The complexities presented here are the in-place complexities,
-- and do not match the naive but concise implementations included here.
newtype Sorted (cpu :: AsymP) (mem :: AsymP) a = Sorted {runSort :: [a]}

insertionSort :: (n >=. O(N^.2), m >=. O(One), Ord a) => [a] -> Sorted n m a
insertionSort = Sorted . foldl' (flip insert) []

mergeSort :: (n >=. O(N*.LogN), m >=. O(N), Ord a) => [a] -> Sorted n m a
mergeSort = Sorted . sort

quickSort :: (n >=. O(N*.LogN) , m >=. O(LogN), Ord a) => [a] -> Sorted n m a
quickSort (x:xs) = Sorted $ (recr lt) ++ (x:(recr gt))
  where (lt, gt) = partition (< x) xs
        recr = runSort . quickSort @(O(N*.LogN)) @(O(LogN))
quickSort [] = Sorted []
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> _ [3,2,1] :: Sorted (O(N*.LogN)) (O(N)) Integer

<interactive>:58:14: error:
    Not in scope: type constructor or class ‘Sorted’

<interactive>:58:22: error:
    Not in scope: type constructor or class ‘O’

<interactive>:58:24: error:
    Not in scope: type constructor or class ‘N’

<interactive>:58:25: error:
    Not in scope: type constructor or class ‘*.’

<interactive>:58:27: error:
    Not in scope: type constructor or class ‘LogN’

<interactive>:58:35: error:
    Not in scope: type constructor or class ‘O’

<interactive>:58:37: error:
    Not in scope: type constructor or class ‘N’
(0.01 secs,)
λ> :load Sorting.hs 
[1 of 2] Compiling ONotation        ( ONotation.hs, interpreted )
[2 of 2] Compiling Sorting          ( Sorting.hs, interpreted )
Ok, two modules loaded.
(0.03 secs,)
λ> _ [3,2,1] :: Sorted (O(N*.LogN)) (O(N)) Integer

<interactive>:60:1: error:
    • Found hole:
        _ :: [Integer] -> Sorted (O ('NLogN 1 1)) (O N) Integer
    • In the expression: _
      In the expression:
          _ [3, 2, 1] :: Sorted (O (N *. LogN)) (O (N)) Integer
      In an equation for ‘it’:
          it = _ [3, 2, ....] :: Sorted (O (N *. LogN)) (O (N)) Integer
    • Relevant bindings include
        it :: Sorted (O (N *. LogN)) (O N) Integer
          (bound at <interactive>:60:1)
      Valid hole fits include
        mergeSort :: forall (n :: AsymP) (m :: AsymP) a.
                     (n >=. O (N *. LogN), m >=. O N, Ord a) =>
                     [a] -> Sorted n m a
          with n ~ (O ('NLogN 1 1)), m ~ (O N), a ~ Integer
        quickSort :: forall (n :: AsymP) (m :: AsymP) a.
                     (n >=. O (N *. LogN), m >=. O LogN, Ord a) =>
                     [a] -> Sorted n m a
          with n ~ (O ('NLogN 1 1)), m ~ (O N), a ~ Integer
        Sorted :: forall (cpu :: AsymP) (mem :: AsymP) a.
                  [a] -> Sorted cpu mem a
          with cpu ~ (O ('NLogN 1 1)), mem ~ (O N), a ~ Integer
(0.10 secs,)
λ> _ [3,2,1] :: Sorted (O(N)) (O(N)) Integer

<interactive>:61:1: error:
    • Found hole: _ :: [Integer] -> Sorted (O N) (O N) Integer
    • In the expression: _
      In the expression: _ [3, 2, 1] :: Sorted (O (N)) (O (N)) Integer
      In an equation for ‘it’:
          it = _ [3, 2, ....] :: Sorted (O (N)) (O (N)) Integer
    • Relevant bindings include
        it :: Sorted (O N) (O N) Integer (bound at <interactive>:61:1)
      Valid hole fits include
        Sorted :: forall (cpu :: AsymP) (mem :: AsymP) a.
                  [a] -> Sorted cpu mem a
          with cpu ~ (O N), mem ~ (O N), a ~ Integer
(0.08 secs,)
λ> :!color Free.hs 

module Free where

data Free f a = Pure a | Free (f (Free f a))

instance Functor f => Functor (Free f) where
  fmap f = go where
    go (Pure a)  = Pure (f a)
    go (Free fa) = Free (go <$> fa)

instance Functor f => Applicative (Free f) where
  pure = Pure

  Pure a <*> Pure b = Pure $ a b
  Pure a <*> Free mb = Free $ fmap a <$> mb
  Free ma <*> b = Free $ (<*> b) <$> ma

instance Functor f => Monad (Free f) where
  return = pure

  Pure a >>= f = f a
  Free m >>= f = Free (fmap _ m)
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> 
λ> :load Free.hs 
[1 of 1] Compiling Free             ( Free.hs, interpreted )

Free.hs:22:29: error:
    • Found hole: _ :: Free f a -> Free f b
      Where: ‘a’, ‘b’ are rigid type variables bound by
               the type signature for:
                 (>>=) :: forall a b. Free f a -> (a -> Free f b) -> Free f b
               at Free.hs:21:10-12
             ‘f’ is a rigid type variable bound by
               the instance declaration
               at Free.hs:18:10-36
    • In the first argument of ‘fmap’, namely ‘_’
      In the first argument of ‘Free’, namely ‘(fmap _ m)’
      In the expression: Free (fmap _ m)
    • Relevant bindings include
        f :: a -> Free f b (bound at Free.hs:22:14)
        m :: f (Free f a) (bound at Free.hs:22:8)
        (>>=) :: Free f a -> (a -> Free f b) -> Free f b
          (bound at Free.hs:21:10)
      Constraints include Functor f (from Free.hs:18:10-36)
   |
22 |   Free m >>= f = Free (fmap _ m)
   |                             ^
Failed, no modules loaded.
(0.05 secs,)
λ> :set -frefinement-level-hole-fits=1
λ> :load Free.hs 
[1 of 1] Compiling Free             ( Free.hs, interpreted )

Free.hs:22:29: error:
    • Found hole: _ :: Free f a -> Free f b
      Where: ‘a’, ‘b’ are rigid type variables bound by
               the type signature for:
                 (>>=) :: forall a b. Free f a -> (a -> Free f b) -> Free f b
               at Free.hs:21:10-12
             ‘f’ is a rigid type variable bound by
               the instance declaration
               at Free.hs:18:10-36
    • In the first argument of ‘fmap’, namely ‘_’
      In the first argument of ‘Free’, namely ‘(fmap _ m)’
      In the expression: Free (fmap _ m)
    • Relevant bindings include
        f :: a -> Free f b (bound at Free.hs:22:14)
        m :: f (Free f a) (bound at Free.hs:22:8)
        (>>=) :: Free f a -> (a -> Free f b) -> Free f b
          (bound at Free.hs:21:10)
      Constraints include Functor f (from Free.hs:18:10-36)
      Valid refinement hole fits include
        fmap (_ :: a -> b)
          where fmap :: forall (f :: * -> *) a b.
                        Functor f =>
                        (a -> b) -> f a -> f b
          with f ~ (Free f), a ~ a, b ~ b
        (<*>) (_ :: Free f (a -> b))
          where (<*>) :: forall (f :: * -> *) a b.
                         Applicative f =>
                         f (a -> b) -> f a -> f b
          with f ~ (Free f), a ~ a, b ~ b
        (=<<) (_ :: a -> Free f b)
          where (=<<) :: forall (m :: * -> *) a b.
                         Monad m =>
                         (a -> m b) -> m a -> m b
          with m ~ (Free f), a ~ a, b ~ b
        (<*) (_ :: Free f b)
          where (<*) :: forall (f :: * -> *) a b.
                        Applicative f =>
                        f a -> f b -> f a
          with f ~ (Free f), a ~ b, b ~ a
        (<$) (_ :: b)
          where (<$) :: forall (f :: * -> *) a b.
                        Functor f =>
                        a -> f b -> f a
          with f ~ (Free f), a ~ b, b ~ a
        (<$>) (_ :: a -> b)
          where (<$>) :: forall (f :: * -> *) a b.
                         Functor f =>
                         (a -> b) -> f a -> f b
          with f ~ (Free f), a ~ a, b ~ b
        (Some refinement hole fits suppressed; use -fmax-refinement-hole-fits=N or -fno-max-refinement-hole-fits)
   |
22 |   Free m >>= f = Free (fmap _ m)
   |                             ^
Failed, no modules loaded.
(0.09 secs,)
λ> 
λ>