mirror of
https://github.com/github/semantic.git
synced 2024-12-24 23:42:31 +03:00
Turn on -XMonadFailDesugaring
globally.
In the past few years, GHC has been moving to remove the `fail` method from the definition of `Monad`, a longtime wart, and requiring monads that fail due to an incomplete pattern match to implement `MonadFail`. You can read about it[here](https://wiki.haskell.org/MonadFail_Proposal). Though this move is still in progress, we can opt into it by turning on the `-XMonadFailDesugaring` extension. The matching and rewriting systems will both benefit from this, as the incomplete pattern match in following rewrite rule will crash without `-XMonadFailDesugaring`, even though the sensible and correct thing for the rule to do is call out to its `MonadFail` instance: ```haskell -- crashes the program without -XMonadFailDesugaring getReceiver :: Rule a (Ruby.Send term) term getReceiver = do (Ruby.Send (Just rec) _ _ _) <- target pure rec ``` In addition, turning on `MonadFailDesugaring` will warn you if you put an incomplete pattern match in a monad that doesn't implement `MonadFail`. This setting will become implicit in GHC 8.6, so this is a good chance to make sure that we don't introduce any incomplete patterns going forward.
This commit is contained in:
parent
c5d75c41f3
commit
8800f7072e
@ -286,6 +286,7 @@ library
|
||||
, DeriveTraversable
|
||||
, FlexibleContexts
|
||||
, FlexibleInstances
|
||||
, MonadFailDesugaring
|
||||
, MultiParamTypeClasses
|
||||
, OverloadedStrings
|
||||
, RecordWildCards
|
||||
@ -384,6 +385,7 @@ test-suite test
|
||||
, DeriveGeneric
|
||||
, FlexibleContexts
|
||||
, FlexibleInstances
|
||||
, MonadFailDesugaring
|
||||
, MultiParamTypeClasses
|
||||
, OverloadedStrings
|
||||
, RecordWildCards
|
||||
|
Loading…
Reference in New Issue
Block a user