hindent 4.5.4 → 4.5.5
raw patch · 10 files changed
+60/−34 lines, 10 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- HIndent: instance Eq CodeBlock
- HIndent: instance Show CodeBlock
- HIndent: styleAuthor :: Style -> !Text
- HIndent: styleCommentPreprocessor :: Style -> forall s' m. MonadState (PrintState s') m => [Comment] -> m [Comment]
- HIndent: styleDefConfig :: Style -> !Config
- HIndent: styleDescription :: Style -> !Text
- HIndent: styleExtenders :: Style -> ![Extender s]
- HIndent: styleInitialState :: Style -> !s
- HIndent: styleName :: Style -> !Text
- HIndent.Pretty: instance Pretty Alt
- HIndent.Pretty: instance Pretty Asst
- HIndent.Pretty: instance Pretty BangType
- HIndent.Pretty: instance Pretty Binds
- HIndent.Pretty: instance Pretty Bracket
- HIndent.Pretty: instance Pretty ClassDecl
- HIndent.Pretty: instance Pretty ConDecl
- HIndent.Pretty: instance Pretty Context
- HIndent.Pretty: instance Pretty DataOrNew
- HIndent.Pretty: instance Pretty Decl
- HIndent.Pretty: instance Pretty DeclHead
- HIndent.Pretty: instance Pretty Deriving
- HIndent.Pretty: instance Pretty Exp
- HIndent.Pretty: instance Pretty ExportSpec
- HIndent.Pretty: instance Pretty ExportSpecList
- HIndent.Pretty: instance Pretty FieldDecl
- HIndent.Pretty: instance Pretty FieldUpdate
- HIndent.Pretty: instance Pretty FunDep
- HIndent.Pretty: instance Pretty GuardedRhs
- HIndent.Pretty: instance Pretty IPBind
- HIndent.Pretty: instance Pretty ImportDecl
- HIndent.Pretty: instance Pretty ImportSpec
- HIndent.Pretty: instance Pretty ImportSpecList
- HIndent.Pretty: instance Pretty InstDecl
- HIndent.Pretty: instance Pretty InstHead
- HIndent.Pretty: instance Pretty InstRule
- HIndent.Pretty: instance Pretty Kind
- HIndent.Pretty: instance Pretty Literal
- HIndent.Pretty: instance Pretty Match
- HIndent.Pretty: instance Pretty Module
- HIndent.Pretty: instance Pretty ModuleHead
- HIndent.Pretty: instance Pretty ModuleName
- HIndent.Pretty: instance Pretty ModulePragma
- HIndent.Pretty: instance Pretty Name
- HIndent.Pretty: instance Pretty Overlap
- HIndent.Pretty: instance Pretty Pat
- HIndent.Pretty: instance Pretty PatField
- HIndent.Pretty: instance Pretty QName
- HIndent.Pretty: instance Pretty QOp
- HIndent.Pretty: instance Pretty QualConDecl
- HIndent.Pretty: instance Pretty QualStmt
- HIndent.Pretty: instance Pretty Rhs
- HIndent.Pretty: instance Pretty Sign
- HIndent.Pretty: instance Pretty SpecialCon
- HIndent.Pretty: instance Pretty Splice
- HIndent.Pretty: instance Pretty Stmt
- HIndent.Pretty: instance Pretty TyVarBind
- HIndent.Pretty: instance Pretty Type
- HIndent.Pretty: instance Pretty WarningText
- HIndent.Styles.ChrisDone: instance Show l => Show (OpChainLink l)
- HIndent.Styles.Gibiansky: gibianskyForceSingleLine :: State -> Bool
- HIndent.Styles.Gibiansky: gibianskyLetBind :: State -> Bool
- HIndent.Types: comInfoComment :: ComInfo -> !Comment
- HIndent.Types: comInfoLocation :: ComInfo -> !(Maybe ComInfoLocation)
- HIndent.Types: configClearEmptyLines :: Config -> !Bool
- HIndent.Types: configIndentSpaces :: Config -> !Int64
- HIndent.Types: configMaxColumns :: Config -> !Int64
- HIndent.Types: instance Alternative (Printer s)
- HIndent.Types: instance Applicative (Printer s)
- HIndent.Types: instance Data ComInfo
- HIndent.Types: instance Data ComInfoLocation
- HIndent.Types: instance Data NodeInfo
- HIndent.Types: instance Default Config
- HIndent.Types: instance Eq (PrintState s)
- HIndent.Types: instance Eq ComInfoLocation
- HIndent.Types: instance Functor (Printer s)
- HIndent.Types: instance Monad (Printer s)
- HIndent.Types: instance MonadPlus (Printer s)
- HIndent.Types: instance MonadState (PrintState s) (Printer s)
- HIndent.Types: instance Show ComInfo
- HIndent.Types: instance Show ComInfoLocation
- HIndent.Types: instance Show NodeInfo
- HIndent.Types: instance Typeable ComInfo
- HIndent.Types: instance Typeable ComInfoLocation
- HIndent.Types: instance Typeable NodeInfo
- HIndent.Types: nodeInfoComments :: NodeInfo -> ![ComInfo]
- HIndent.Types: nodeInfoSpan :: NodeInfo -> !SrcSpanInfo
- HIndent.Types: psColumn :: PrintState s -> !Int64
- HIndent.Types: psCommentPreprocessor :: PrintState s -> forall m. MonadState (PrintState s) m => [Comment] -> m [Comment]
- HIndent.Types: psConfig :: PrintState s -> !Config
- HIndent.Types: psEolComment :: PrintState s -> !Bool
- HIndent.Types: psExtenders :: PrintState s -> ![Extender s]
- HIndent.Types: psIndentLevel :: PrintState s -> !Int64
- HIndent.Types: psInsideCase :: PrintState s -> !Bool
- HIndent.Types: psLine :: PrintState s -> !Int64
- HIndent.Types: psNewline :: PrintState s -> !Bool
- HIndent.Types: psOutput :: PrintState s -> !Builder
- HIndent.Types: psParseMode :: PrintState s -> !ParseMode
- HIndent.Types: psUserState :: PrintState s -> !s
- HIndent.Types: runPrinter :: Printer s a -> StateT (PrintState s) (MaybeT Identity) a
- HIndent.Types: styleAuthor :: Style -> !Text
- HIndent.Types: styleCommentPreprocessor :: Style -> forall s' m. MonadState (PrintState s') m => [Comment] -> m [Comment]
- HIndent.Types: styleDefConfig :: Style -> !Config
- HIndent.Types: styleDescription :: Style -> !Text
- HIndent.Types: styleExtenders :: Style -> ![Extender s]
- HIndent.Types: styleInitialState :: Style -> !s
- HIndent.Types: styleName :: Style -> !Text
+ HIndent: [styleAuthor] :: Style -> !Text
+ HIndent: [styleCommentPreprocessor] :: Style -> forall s' m. MonadState (PrintState s') m => [Comment] -> m [Comment]
+ HIndent: [styleDefConfig] :: Style -> !Config
+ HIndent: [styleDescription] :: Style -> !Text
+ HIndent: [styleExtenders] :: Style -> ![Extender s]
+ HIndent: [styleInitialState] :: Style -> !s
+ HIndent: [styleName] :: Style -> !Text
+ HIndent: instance GHC.Classes.Eq HIndent.CodeBlock
+ HIndent: instance GHC.Show.Show HIndent.CodeBlock
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Alt
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Asst
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.BangType
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Binds
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Bracket
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.ClassDecl
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.ConDecl
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Context
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.DataOrNew
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Decl
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.DeclHead
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Deriving
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Exp
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.ExportSpec
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.ExportSpecList
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.FieldDecl
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.FieldUpdate
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.FunDep
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.GuardedRhs
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.IPBind
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.ImportDecl
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.ImportSpec
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.ImportSpecList
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.InstDecl
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.InstHead
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.InstRule
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Kind
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Literal
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Match
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Module
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.ModuleHead
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.ModuleName
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.ModulePragma
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Name
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Overlap
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Pat
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.PatField
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.QName
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.QOp
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.QualConDecl
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.QualStmt
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Rhs
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Sign
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.SpecialCon
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Splice
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Stmt
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.TyVarBind
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.Type
+ HIndent.Pretty: instance HIndent.Pretty.Pretty Language.Haskell.Exts.Annotated.Syntax.WarningText
+ HIndent.Styles.ChrisDone: instance GHC.Show.Show l => GHC.Show.Show (HIndent.Styles.ChrisDone.OpChainLink l)
+ HIndent.Styles.Gibiansky: [gibianskyForceSingleLine] :: State -> Bool
+ HIndent.Styles.Gibiansky: [gibianskyLetBind] :: State -> Bool
+ HIndent.Types: [comInfoComment] :: ComInfo -> !Comment
+ HIndent.Types: [comInfoLocation] :: ComInfo -> !(Maybe ComInfoLocation)
+ HIndent.Types: [configClearEmptyLines] :: Config -> !Bool
+ HIndent.Types: [configIndentSpaces] :: Config -> !Int64
+ HIndent.Types: [configMaxColumns] :: Config -> !Int64
+ HIndent.Types: [nodeInfoComments] :: NodeInfo -> ![ComInfo]
+ HIndent.Types: [nodeInfoSpan] :: NodeInfo -> !SrcSpanInfo
+ HIndent.Types: [psColumn] :: PrintState s -> !Int64
+ HIndent.Types: [psCommentPreprocessor] :: PrintState s -> forall m. MonadState (PrintState s) m => [Comment] -> m [Comment]
+ HIndent.Types: [psConfig] :: PrintState s -> !Config
+ HIndent.Types: [psEolComment] :: PrintState s -> !Bool
+ HIndent.Types: [psExtenders] :: PrintState s -> ![Extender s]
+ HIndent.Types: [psIndentLevel] :: PrintState s -> !Int64
+ HIndent.Types: [psInsideCase] :: PrintState s -> !Bool
+ HIndent.Types: [psLine] :: PrintState s -> !Int64
+ HIndent.Types: [psNewline] :: PrintState s -> !Bool
+ HIndent.Types: [psOutput] :: PrintState s -> !Builder
+ HIndent.Types: [psParseMode] :: PrintState s -> !ParseMode
+ HIndent.Types: [psUserState] :: PrintState s -> !s
+ HIndent.Types: [runPrinter] :: Printer s a -> StateT (PrintState s) (MaybeT Identity) a
+ HIndent.Types: [styleAuthor] :: Style -> !Text
+ HIndent.Types: [styleCommentPreprocessor] :: Style -> forall s' m. MonadState (PrintState s') m => [Comment] -> m [Comment]
+ HIndent.Types: [styleDefConfig] :: Style -> !Config
+ HIndent.Types: [styleDescription] :: Style -> !Text
+ HIndent.Types: [styleExtenders] :: Style -> ![Extender s]
+ HIndent.Types: [styleInitialState] :: Style -> !s
+ HIndent.Types: [styleName] :: Style -> !Text
+ HIndent.Types: instance Control.Monad.State.Class.MonadState (HIndent.Types.PrintState s) (HIndent.Types.Printer s)
+ HIndent.Types: instance Data.Data.Data HIndent.Types.ComInfo
+ HIndent.Types: instance Data.Data.Data HIndent.Types.ComInfoLocation
+ HIndent.Types: instance Data.Data.Data HIndent.Types.NodeInfo
+ HIndent.Types: instance Data.Default.Class.Default HIndent.Types.Config
+ HIndent.Types: instance GHC.Base.Alternative (HIndent.Types.Printer s)
+ HIndent.Types: instance GHC.Base.Applicative (HIndent.Types.Printer s)
+ HIndent.Types: instance GHC.Base.Functor (HIndent.Types.Printer s)
+ HIndent.Types: instance GHC.Base.Monad (HIndent.Types.Printer s)
+ HIndent.Types: instance GHC.Base.MonadPlus (HIndent.Types.Printer s)
+ HIndent.Types: instance GHC.Classes.Eq (HIndent.Types.PrintState s)
+ HIndent.Types: instance GHC.Classes.Eq HIndent.Types.ComInfoLocation
+ HIndent.Types: instance GHC.Show.Show HIndent.Types.ComInfo
+ HIndent.Types: instance GHC.Show.Show HIndent.Types.ComInfoLocation
+ HIndent.Types: instance GHC.Show.Show HIndent.Types.NodeInfo
- HIndent.Styles.ChrisDone: isShort :: Pretty ast => ast NodeInfo -> Printer t (Bool, PrintState t)
+ HIndent.Styles.ChrisDone: isShort :: (Pretty ast) => ast NodeInfo -> Printer t (Bool, PrintState t)
- HIndent.Styles.JohanTibell: isShort :: Pretty ast => ast NodeInfo -> Printer s (Bool)
+ HIndent.Styles.JohanTibell: isShort :: (Pretty ast) => ast NodeInfo -> Printer s (Bool)
Files
- README.md +13/−4
- elisp/hindent.el +6/−6
- hindent.cabal +1/−1
- src/HIndent.hs +1/−1
- src/HIndent/Pretty.hs +5/−8
- src/HIndent/Styles/ChrisDone.hs +16/−14
- test/chris-done/expected/20.exp +2/−0
- test/chris-done/tests/20.test +2/−0
- test/gibiansky/expected/46.exp +7/−0
- test/gibiansky/tests/46.test +7/−0
README.md view
@@ -9,13 +9,14 @@ ## Install - $ cabal install hindent--You might need to `cabal install happy` if haskell-src-exts complains.+ $ stack build --copy-bins ## Usage - $ hindent+ hindent is used in a pipeline style:++ $ cat path/to/sourcefile.hs | hindent > outfile.hs+ hindent: arguments: --style [fundamental|chris-done|johan-tibell|gibiansky] ## Emacs@@ -32,6 +33,8 @@ To enable it, add the following to your init file: ```lisp+(add-to-list 'load-path "/path/to/hindent/elisp")+(require 'hindent) (add-hook 'haskell-mode-hook #'hindent-mode) ``` @@ -52,6 +55,12 @@ Note that unlike in emacs you have to take care of selecting a sensible buffer region as input to hindent yourself. If that is too much trouble you can try [vim-textobj-haskell](https://github.com/gilligan/vim-textobj-haskell) which provides a text object for top level bindings.++## Atom++Basic support is provided through [atom/hindent.coffee](https://github.com/chrisdone/hindent/blob/master/atom/hindent.coffee),+which adds hindent to atom menu with each available style. Mode should be installed as package into `.atom\packages\${PACKAGE_NAME}`,+here is simple example of atom [package](https://github.com/Heather/atom-hindent). ## Contributing your own printer style
elisp/hindent.el view
@@ -136,8 +136,8 @@ ;; Otherwise we just do our line-based hack. (t (save-excursion- (let ((start (or (flet- ((jump ()+ (let ((start (or (cl-letf+ (((symbol-function 'jump) #'(lambda () (search-backward-regexp "^[^ \n]" nil t 1) (cond ((save-excursion (goto-char (line-beginning-position))@@ -145,13 +145,13 @@ (jump)) (t (unless (or (looking-at "^-}$") (looking-at "^{-$"))- (point))))))+ (point))))))) (goto-char (line-end-position)) (jump)) 0)) (end (progn (goto-char (1+ (point)))- (or (flet- ((jump ()+ (or (cl-letf+ (((symbol-function 'jump) #'(lambda () (when (search-forward-regexp "[\n]+[^ \n]" nil t 1) (cond ((save-excursion (goto-char (line-beginning-position))@@ -160,7 +160,7 @@ (t (forward-char -1) (search-backward-regexp "[^\n ]" nil t) (forward-char)- (point))))))+ (point))))))) (jump)) (point-max))))) (cons start end))))))
hindent.cabal view
@@ -1,5 +1,5 @@ name: hindent-version: 4.5.4+version: 4.5.5 synopsis: Extensible Haskell pretty printer description: Extensible Haskell pretty printer. Both a library and an executable. .
src/HIndent.hs view
@@ -133,7 +133,7 @@ T.lines $ inp where cppLine :: Text -> Bool- cppLine src = any (`T.isPrefixOf` src) ["#if", "#end", "#else", "#define", "#undef"]+ cppLine src = any (`T.isPrefixOf` src) ["#if", "#end", "#else", "#define", "#undef", "#elif"] classify :: Text -> CodeBlock classify text = if cppLine text
src/HIndent/Pretty.hs view
@@ -136,8 +136,8 @@ printComment (Just $ srcInfoSpan $ nodeInfoSpan info) comment where info = ann ast- + -- | Pretty print a comment. printComment :: MonadState (PrintState s) m => Maybe SrcSpan -> Comment -> m () printComment mayNodespan (Comment inline cspan str) =@@ -517,7 +517,7 @@ prettyInfixOp :: MonadState (PrintState s) m => QName NodeInfo -> m () prettyInfixOp x = case x of- Qual{} -> pretty' x+ Qual{} -> do write "`"; pretty' x; write "`" UnQual _ n -> case n of Ident _ i -> string ("`" ++ i ++ "`")@@ -574,8 +574,7 @@ do pretty left write " == " pretty right- TyPromoted{} ->- error "FIXME: No implementation for TyPromoted."+ ty@TyPromoted{} -> pretty' ty TySplice{} -> error "FIXME: No implementation for TySplice." @@ -913,8 +912,7 @@ ClassA _ name types -> spaced (pretty name : map pretty types)- InfixA{} ->- error "FIXME: No implementation for InfixA."+ i@InfixA{} -> pretty' i IParam{} -> error "FIXME: No implementation for IParam." EqualP _ a b ->@@ -1207,8 +1205,7 @@ error "FIXME: No implementation for PatBracket." TypeBracket _ _ -> error "FIXME: No implementation for TypeBracket."- DeclBracket _ _ ->- error "FIXME: No implementation for DeclBracket."+ d@(DeclBracket _ _) -> pretty' d instance Pretty IPBind where prettyInternal x =
src/HIndent/Styles/ChrisDone.hs view
@@ -265,13 +265,17 @@ flatten f' as = (f',as) -- | Lambdas are dependent if they can be. exp (Lambda _ ps b) =- depend (write "\\")+ depend (write "\\" >> maybeSpace) (do spaced (map pretty ps) dependOrNewline (write " -> ") b (indented 1 . pretty))+ where maybeSpace = case ps of+ (PBangPat {}):_ -> space+ (PIrrPat {}):_ -> space+ _ -> return () exp (Tuple _ boxed exps) = depend (write (case boxed of Unboxed -> "(#"@@ -463,17 +467,15 @@ -- | Make the right hand side dependent if it's flat, otherwise -- newline it.-dependOrNewline :: Printer t ()- -> Exp NodeInfo- -> (Exp NodeInfo -> Printer t ())- -> Printer t ()+dependOrNewline+ :: Printer t ()+ -> Exp NodeInfo+ -> (Exp NodeInfo -> Printer t ())+ -> Printer t () dependOrNewline left right f =- do if isFlat right- then renderDependent- else do (small,st) <- isSmall renderDependent- if small- then put st- else do left- newline- (f right)- where renderDependent = depend left (f right)+ do (fits,st) <- fitsOnOneLine (depend left (f right))+ if fits+ then put st+ else do left+ newline+ (f right)
+ test/chris-done/expected/20.exp view
@@ -0,0 +1,2 @@+f = \ ~a -> undefined+f = \ !a -> undefined
+ test/chris-done/tests/20.test view
@@ -0,0 +1,2 @@+f = \ ~a -> undefined+f = \ !a -> undefined
+ test/gibiansky/expected/46.exp view
@@ -0,0 +1,7 @@+type X = '[]++type X = '[Int]++type X = '[Int, String]++a :: (A ∈ B w) => IO w
+ test/gibiansky/tests/46.test view
@@ -0,0 +1,7 @@+type X = '[]++type X = '[Int]++type X = '[Int, String]++a :: (A ∈ B w) => IO w