úÎ1ß/M     Inspection testing(c) Joachim Breitner, 2017MITmail@joachim-breitner.de GHC specifcSafe0!An annotation to keep names aliveNone5Selects those bindings that define the given variableÃThis is a heuristic, which only works if both slices have auxillary variables in the right order. (This is mostly to work-around the buggy CSE in GHC-8.0) It also breaks if there is shadowing.Returns True] if the given core expression mentions no type constructor anywhere that has the given name.QTrue if the given variable binding does not allocate, if called fully satisfied.’It currently does not look through function calls, which of course could allocate. It should probably at least look through local function calls.<The variable is important to know the arity of the function.Inspection Testing for Haskell(c) Joachim Breitner, 2017MITmail@joachim-breitner.de GHC specifcNone/02Properties of the obligation target to be checked.Are the two functions equal?More precisely: f is equal to g if either the definition of f is f = g, or the definition of g is g = f, or if the definitions are f = e and g = e. tDoes this type not occur anywhere in the definition of the function (neither locally bound nor passed as arguments) /Does this function perform no heap allocations. :This data type describes an inspection testing obligation.$It is recommended to build it using ƒ, for backwards compatibility when new fields are added. You can also use the more memonic convenience functions like '(===)' or .%The obligation needs to be passed to . kThe target of a test obligation; invariably the name of a local definition. To get the name of a function foo, write 'foo. This requires  {-# LANGAUGE TemplateHaskell #-}.)The property of the target to be checked.An optional name for the test#Do we expect this property to fail?LThe source location where this obligation is defined. This is filled in by .jCreates an inspection obligation for the given function name with default values for the optional fields.9Convenience function to declare two functions to be equal—Convenience function to declare two functions to be equal, but expect the test to fail (This is useful for documentation purposes, or as a TODO list.)YConvenience function to declare that a function s implementation does not mention a type inspect $ fusedFunction  ''[]LAs seen in the example above, the entry point to inspection testing is the  function, to which you pass an  .          11None!"\#The plugin. It supports the option .-fplugin-opt=Test.Inspection.Plugin=keep-going to ignore a failing build.!>Like show, but omit the module name if it is he current module",like prettySrcLoc, but omits the module name#$%&'()*+,!-./01"#$%&'()*+,!-./01"2      !"#$%&'()*+,-./01234-inspection-testing-0.1-HCymQmJLBy17Y31VBNh9ieTest.Inspection.InternalTest.Inspection.CoreTest.InspectionTest.Inspection.Plugin KeepAlive$fDataKeepAlivesliceeqSlice freeOfTypedoesNotAllocatePropertyEqualToNoType NoAllocation ObligationtargetpropertytestName expectFailsrcLoc mkObligation====/= hasNoTypeinspect$fDataProperty$fDataObligationplugin$fEqUponFailure SeenNames allLocalNames mkEqualitynameSeen rememberName showTHNamemyPrettySrcLocResult UponFailureAbortCompilation KeepGoinginstallextractObligationsisKeepAliveAnnfindObligationAnnprettyObligationprettyPropertycheckObligationlookupNameInGuts checkProperty proofPasspartitionMaybe