content: {-# LANGUAGE Arrows #-}
  {-# LANGUAGE RankNTypes #-}
  {-# LANGUAGE UnicodeSyntax #-}
  module Test11018 where
  
  nonUnicode :: forall a . a -> IO Int
  nonUnicode _ = do
    x <- readChar
    return 4
  
  -- ^ An opaque ESD handle for recording data from the soundcard via ESD.
  data Recorder fr ch (r ∷ * -> *)
      = Recorder {
          reCloseH :: !(FinalizerHandle r)
        }
  
  f :: Arrow a => a (Int,Int,Int) Int
  f = proc (x,y,z) -> returnA -< x+y
  
  f2 :: Arrow a => a (Int,Int,Int) Int
  f2 = proc (x,y,z) -> returnA >- x+y
  
  g :: ArrowApply a => Int -> a (a Int Int,Int) Int
  g y = proc (x,z) -> x -<< 2+y
  
  g2 :: ArrowApply a => Int -> a (a Int Int,Int) Int
  g2 y = proc (x,z) -> x >>- 2+y
  
  -- -------------------------------------
  
  unicode ∷ ∀ a . a → IO Int
  unicode _ = do
    x ← readChar
    return 4
  
  -- ^ An opaque ESD handle for recording data from the soundcard via ESD.
  data RecorderU fr ch (r ∷ ★ → ★)
      = RecorderU {
          reCloseHU ∷ !(FinalizerHandle r)
        }
  
  fU :: Arrow a  ⇒ a (Int,Int,Int) Int
  fU = proc (x,y,z) -> returnA ⤙ x+y
  
  f2U :: Arrow a ⇒ a (Int,Int,Int) Int
  f2U = proc (x,y,z) -> returnA ⤚ x+y
  
  gU :: ArrowApply a ⇒ Int -> a (a Int Int,Int) Int
  gU y = proc (x,z) -> x ⤛ 2+y
  
  g2U :: ArrowApply a ⇒ Int -> a (a Int Int,Int) Int
  g2U y = proc (x,z) -> x ⤜ 2+y
  