[GHC] #12363: Type application for infix

GHC ghc-devs at haskell.org
Tue Dec 20 22:51:04 UTC 2016


#12363: Type application for infix
-------------------------------------+-------------------------------------
        Reporter:  Iceland_jack      |                Owner:
            Type:  feature request   |               Status:  new
        Priority:  lowest            |            Milestone:
       Component:  Compiler          |              Version:  8.0.1
  (Parser)                           |             Keywords:
      Resolution:                    |  TypeApplications
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Iceland_jack):

 Fits well with `catch`, `catchIO`, `catchSTM` idiom

 {{{#!hs
 -- do print (a ! 5)     `catch` \e -> print (e :: SomeException)
 --    print (b ! (0,5)) `catch` \e -> print (e :: SomeException)
 do print (a ! 5)     `catch` @SomeException print
    print (b ! (0,5)) `catch` @SomeException print
 }}}

 In that case you could write `print @SomeException` but that will not work
 if the handler doesn't mention the exception at all

 {{{#!hs
 -- rmDir :: FilePath -> IO ()
 -- rmDir dir = removeDirectoryRecursive dir `catch` (const $ return () ::
 IOException -> IO ())
 rmDir :: FilePath -> IO ()
 rmDir dir = removeDirectoryRecursive dir `catch` @IOException const
 (return ())
 }}}

 (granted `const @_ @IOException` works here, but having a singular place
 for the type application is nice)

 and from [http://hsyl20.fr/home/posts/2016-12-12-control-flow-in-haskell-
 part-3.html Control Flow in Haskell (3) - Flow with Variant]

 {{{#!hs
 -- test = f 5 >%~=> (\(a :: A) -> putStrLn "An A has been returned")
 --            >%~=> (\(b :: B) -> putStrLn "A B has been returned")
 --            >%~=> (\(c :: C) -> putStrLn "A C has been returned")
 test = f 5 >%~=> @A \_ -> putStrLn "An A has been returned"
            >%~=> @B \_ -> putStrLn "A B has been returned"
            >%~=> @C \_ -> putStrLn "A C has been returned"
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12363#comment:13>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list