<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ --> <title>src/full/Agda/TypeChecking/Monad/Base.hs</title> <link type='text/css' rel='stylesheet' href='hscolour.css' /> </head> <body> <pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE CPP, ExistentialQuantification, FlexibleContexts, Rank2Types, <a name="line-2"></a> TypeSynonymInstances, MultiParamTypeClasses, FlexibleInstances, <a name="line-3"></a> UndecidableInstances, DeriveDataTypeable, GeneralizedNewtypeDeriving, <a name="line-4"></a> DeriveFunctor, DeriveFoldable, DeriveTraversable <a name="line-5"></a> #-}</span> <a name="line-6"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>TypeChecking</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Base</span> <span class='hs-keyword'>where</span> <a name="line-7"></a> <a name="line-8"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Arrow</span> <a name="line-9"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>C</span> <a name="line-10"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>DeepSeq</span> <a name="line-11"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>E</span> <a name="line-12"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Error</span> <a name="line-13"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>State</span> <a name="line-14"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Reader</span> <a name="line-15"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Applicative</span> <a name="line-16"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Function</span> <a name="line-17"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Int</span> <a name="line-18"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Map</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Map</span> <a name="line-19"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Set</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Set</span> <a name="line-20"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Seq</span> <a name="line-21"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Typeable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-22"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Foldable</span> <a name="line-23"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Traversable</span> <a name="line-24"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>IORef</span> <a name="line-25"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Hashable</span> <a name="line-26"></a> <a name="line-27"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Syntax</span><span class='hs-varop'>.</span><span class='hs-conid'>Common</span> <a name="line-28"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Syntax</span><span class='hs-varop'>.</span><span class='hs-conid'>Concrete</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>C</span> <a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Syntax</span><span class='hs-varop'>.</span><span class='hs-conid'>Concrete</span><span class='hs-varop'>.</span><span class='hs-conid'>Definitions</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>D</span> <a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Syntax</span><span class='hs-varop'>.</span><span class='hs-conid'>Abstract</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>A</span> <a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Syntax</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span> <a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Syntax</span><span class='hs-varop'>.</span><span class='hs-conid'>Position</span> <a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Syntax</span><span class='hs-varop'>.</span><span class='hs-conid'>Scope</span><span class='hs-varop'>.</span><span class='hs-conid'>Base</span> <a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>HashMap</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>HMap</span> <a name="line-35"></a> <a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>TypeChecking</span><span class='hs-varop'>.</span><span class='hs-conid'>CompiledClause</span> <a name="line-37"></a> <a name="line-38"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Interaction</span><span class='hs-varop'>.</span><span class='hs-conid'>Exceptions</span> <a name="line-39"></a><span class='hs-keyword'>import</span> <span class='hs-comment'>{-# SOURCE #-}</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Interaction</span><span class='hs-varop'>.</span><span class='hs-conid'>FindFile</span> <a name="line-40"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Interaction</span><span class='hs-varop'>.</span><span class='hs-conid'>Options</span> <a name="line-41"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Interaction</span><span class='hs-varop'>.</span><span class='hs-conid'>Highlighting</span><span class='hs-varop'>.</span><span class='hs-conid'>Range</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>R</span> <a name="line-42"></a><span class='hs-keyword'>import</span> <span class='hs-comment'>{-# SOURCE #-}</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Interaction</span><span class='hs-varop'>.</span><span class='hs-conid'>Response</span> <a name="line-43"></a> <span class='hs-layout'>(</span><span class='hs-conid'>InteractionOutputCallback</span><span class='hs-layout'>,</span> <span class='hs-varid'>defaultInteractionOutputCallback</span><span class='hs-layout'>)</span> <a name="line-44"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Interaction</span><span class='hs-varop'>.</span><span class='hs-conid'>Highlighting</span><span class='hs-varop'>.</span><span class='hs-conid'>Precise</span> <a name="line-45"></a> <span class='hs-layout'>(</span><span class='hs-conid'>CompressedFile</span><span class='hs-layout'>,</span> <span class='hs-conid'>HighlightingInfo</span><span class='hs-layout'>)</span> <a name="line-46"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Monoid</span> <a name="line-47"></a> <a name="line-48"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Compiler</span><span class='hs-varop'>.</span><span class='hs-conid'>JS</span><span class='hs-varop'>.</span><span class='hs-conid'>Syntax</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>JS</span> <a name="line-49"></a> <a name="line-50"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>FileName</span> <a name="line-51"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>Fresh</span> <a name="line-52"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <a name="line-53"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>Permutation</span> <a name="line-54"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>Pretty</span> <a name="line-55"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>Time</span> <a name="line-56"></a> <a name="line-57"></a><span class='hs-cpp'>#include "../../undefined.h"</span> <a name="line-58"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Agda</span><span class='hs-varop'>.</span><span class='hs-conid'>Utils</span><span class='hs-varop'>.</span><span class='hs-conid'>Impossible</span> <a name="line-59"></a> <a name="line-60"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-61"></a><span class='hs-comment'>-- * Type checking state</span> <a name="line-62"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-63"></a> <a name="line-64"></a><a name="TCState"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>TCState</span> <span class='hs-keyglyph'>=</span> <a name="line-65"></a> <span class='hs-conid'>TCSt</span> <span class='hs-layout'>{</span> <span class='hs-varid'>stFreshThings</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FreshThings</span> <a name="line-66"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stSyntaxInfo</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CompressedFile</span> <a name="line-67"></a> <span class='hs-comment'>-- ^ Highlighting info.</span> <a name="line-68"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stTokens</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CompressedFile</span> <a name="line-69"></a> <span class='hs-comment'>-- ^ Highlighting info for tokens (but not those tokens for</span> <a name="line-70"></a> <span class='hs-comment'>-- which highlighting exists in 'stSyntaxInfo').</span> <a name="line-71"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stTermErrs</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Seq</span> <span class='hs-conid'>TerminationError</span> <a name="line-72"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stMetaStore</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaStore</span> <a name="line-73"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stInteractionPoints</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>InteractionPoints</span> <a name="line-74"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stAwakeConstraints</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Constraints</span> <a name="line-75"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stSleepingConstraints</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Constraints</span> <a name="line-76"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stDirty</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <a name="line-77"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stOccursCheckDefs</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Set</span> <span class='hs-conid'>QName</span> <a name="line-78"></a> <span class='hs-comment'>-- ^ Definitions to be considered during occurs check.</span> <a name="line-79"></a> <span class='hs-comment'>-- Initialized to the current mutual block before the check.</span> <a name="line-80"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stSignature</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signature</span> <a name="line-81"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stImports</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signature</span> <a name="line-82"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stImportedModules</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Set</span> <span class='hs-conid'>ModuleName</span> <a name="line-83"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stModuleToSource</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ModuleToSource</span> <a name="line-84"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stVisitedModules</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>VisitedModules</span> <a name="line-85"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stCurrentModule</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ModuleName</span> <a name="line-86"></a> <span class='hs-comment'>-- ^ The current module is available after it has been type</span> <a name="line-87"></a> <span class='hs-comment'>-- checked.</span> <a name="line-88"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stScope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ScopeInfo</span> <a name="line-89"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stPatternSyns</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>PatternSynDefns</span> <a name="line-90"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stPatternSynImports</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>PatternSynDefns</span> <a name="line-91"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stPragmaOptions</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>PragmaOptions</span> <a name="line-92"></a> <span class='hs-comment'>-- ^ Options applying to the current file. @OPTIONS@</span> <a name="line-93"></a> <span class='hs-comment'>-- pragmas only affect this field.</span> <a name="line-94"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stStatistics</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Statistics</span> <a name="line-95"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stExtLambdaTele</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>QName</span> <span class='hs-layout'>(</span><span class='hs-conid'>Int</span> <span class='hs-layout'>,</span> <span class='hs-conid'>Int</span><span class='hs-layout'>)</span> <a name="line-96"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stMutualBlocks</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>MutualId</span> <span class='hs-layout'>(</span><span class='hs-conid'>Set</span> <span class='hs-conid'>QName</span><span class='hs-layout'>)</span> <a name="line-97"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stLocalBuiltins</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>BuiltinThings</span> <span class='hs-conid'>PrimFun</span> <a name="line-98"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stImportedBuiltins</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>BuiltinThings</span> <span class='hs-conid'>PrimFun</span> <a name="line-99"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stHaskellImports</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Set</span> <span class='hs-conid'>String</span> <a name="line-100"></a> <span class='hs-comment'>-- ^ Imports that should be generated by the compiler (this</span> <a name="line-101"></a> <span class='hs-comment'>-- includes imports from imported modules).</span> <a name="line-102"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stPersistent</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>PersistentTCState</span> <a name="line-103"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stInteractionOutputCallback</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>InteractionOutputCallback</span> <a name="line-104"></a> <span class='hs-comment'>-- ^ Callback fuction to call when there is a response</span> <a name="line-105"></a> <span class='hs-comment'>-- to give to the interactive frontend.</span> <a name="line-106"></a> <span class='hs-comment'>-- See the documentation of 'InteractionOutputCallback'.</span> <a name="line-107"></a> <span class='hs-layout'>}</span> <a name="line-108"></a> <a name="line-109"></a><span class='hs-comment'>-- | A part of the state which is not reverted when an error is thrown</span> <a name="line-110"></a><span class='hs-comment'>-- or the state is reset.</span> <a name="line-111"></a> <a name="line-112"></a><a name="PersistentTCState"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>PersistentTCState</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PersistentTCSt</span> <a name="line-113"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>stDecodedModules</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DecodedModules</span> <a name="line-114"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stPersistentOptions</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CommandLineOptions</span> <a name="line-115"></a> <span class='hs-comment'>-- ^ Options which apply to all files, unless overridden.</span> <a name="line-116"></a> <span class='hs-layout'>}</span> <a name="line-117"></a> <a name="line-118"></a><a name="FreshThings"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>FreshThings</span> <span class='hs-keyglyph'>=</span> <a name="line-119"></a> <span class='hs-conid'>Fresh</span> <span class='hs-layout'>{</span> <span class='hs-varid'>fMeta</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaId</span> <a name="line-120"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fInteraction</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>InteractionId</span> <a name="line-121"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fMutual</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MutualId</span> <a name="line-122"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fName</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>NameId</span> <a name="line-123"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fCtx</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CtxId</span> <a name="line-124"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fProblem</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ProblemId</span> <a name="line-125"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fInt</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <a name="line-126"></a> <span class='hs-comment'>-- ^ Can be used for various things.</span> <a name="line-127"></a> <span class='hs-layout'>}</span> <a name="line-128"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-129"></a> <a name="line-130"></a><a name="initState"></a><span class='hs-definition'>initState</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TCState</span> <a name="line-131"></a><span class='hs-definition'>initState</span> <span class='hs-keyglyph'>=</span> <a name="line-132"></a> <span class='hs-conid'>TCSt</span> <span class='hs-layout'>{</span> <span class='hs-varid'>stFreshThings</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>Fresh</span> <span class='hs-num'>0</span> <span class='hs-num'>0</span> <span class='hs-num'>0</span> <span class='hs-layout'>(</span><span class='hs-conid'>NameId</span> <span class='hs-num'>0</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span> <span class='hs-num'>0</span> <span class='hs-num'>0</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span> <span class='hs-layout'>{</span> <span class='hs-varid'>fProblem</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>1</span> <span class='hs-layout'>}</span> <a name="line-133"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stMetaStore</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-134"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stSyntaxInfo</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mempty</span> <a name="line-135"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stTokens</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mempty</span> <a name="line-136"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stTermErrs</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Seq</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-137"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stInteractionPoints</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-138"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stAwakeConstraints</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span> <a name="line-139"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stSleepingConstraints</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span> <a name="line-140"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stDirty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-141"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stOccursCheckDefs</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Set</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-142"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stSignature</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>emptySignature</span> <a name="line-143"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stImports</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>emptySignature</span> <a name="line-144"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stImportedModules</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Set</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-145"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stModuleToSource</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-146"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stVisitedModules</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-147"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stCurrentModule</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span> <a name="line-148"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stScope</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>emptyScopeInfo</span> <a name="line-149"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stPatternSyns</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-150"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stPatternSynImports</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-151"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stPragmaOptions</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>defaultInteractionOptions</span> <a name="line-152"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stStatistics</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-153"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stExtLambdaTele</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-154"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stMutualBlocks</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-155"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stLocalBuiltins</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-156"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stImportedBuiltins</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-157"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stHaskellImports</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Set</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-158"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stPersistent</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PersistentTCSt</span> <a name="line-159"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>stPersistentOptions</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>defaultOptions</span> <a name="line-160"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stDecodedModules</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-161"></a> <span class='hs-layout'>}</span> <a name="line-162"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stInteractionOutputCallback</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>defaultInteractionOutputCallback</span> <a name="line-163"></a> <span class='hs-layout'>}</span> <a name="line-164"></a> <a name="line-165"></a><a name="stBuiltinThings"></a><span class='hs-definition'>stBuiltinThings</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TCState</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>BuiltinThings</span> <span class='hs-conid'>PrimFun</span> <a name="line-166"></a><span class='hs-definition'>stBuiltinThings</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>stLocalBuiltins</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>union</span><span class='hs-varop'>`</span> <span class='hs-varid'>stImportedBuiltins</span> <span class='hs-varid'>s</span> <a name="line-167"></a> <a name="line-168"></a><a name="instance%20HasFresh%20MetaId%20FreshThings"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>HasFresh</span> <span class='hs-conid'>MetaId</span> <span class='hs-conid'>FreshThings</span> <span class='hs-keyword'>where</span> <a name="line-169"></a> <span class='hs-varid'>nextFresh</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>i</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span> <span class='hs-layout'>{</span> <span class='hs-varid'>fMeta</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>i</span> <span class='hs-varop'>+</span> <span class='hs-num'>1</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span> <a name="line-170"></a> <span class='hs-keyword'>where</span> <a name="line-171"></a> <span class='hs-varid'>i</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fMeta</span> <span class='hs-varid'>s</span> <a name="line-172"></a> <a name="line-173"></a><a name="instance%20HasFresh%20MutualId%20FreshThings"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>HasFresh</span> <span class='hs-conid'>MutualId</span> <span class='hs-conid'>FreshThings</span> <span class='hs-keyword'>where</span> <a name="line-174"></a> <span class='hs-varid'>nextFresh</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>i</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span> <span class='hs-layout'>{</span> <span class='hs-varid'>fMutual</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>i</span> <span class='hs-varop'>+</span> <span class='hs-num'>1</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span> <a name="line-175"></a> <span class='hs-keyword'>where</span> <a name="line-176"></a> <span class='hs-varid'>i</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fMutual</span> <span class='hs-varid'>s</span> <a name="line-177"></a> <a name="line-178"></a><a name="instance%20HasFresh%20InteractionId%20FreshThings"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>HasFresh</span> <span class='hs-conid'>InteractionId</span> <span class='hs-conid'>FreshThings</span> <span class='hs-keyword'>where</span> <a name="line-179"></a> <span class='hs-varid'>nextFresh</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>i</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span> <span class='hs-layout'>{</span> <span class='hs-varid'>fInteraction</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>i</span> <span class='hs-varop'>+</span> <span class='hs-num'>1</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span> <a name="line-180"></a> <span class='hs-keyword'>where</span> <a name="line-181"></a> <span class='hs-varid'>i</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fInteraction</span> <span class='hs-varid'>s</span> <a name="line-182"></a> <a name="line-183"></a><a name="instance%20HasFresh%20NameId%20FreshThings"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>HasFresh</span> <span class='hs-conid'>NameId</span> <span class='hs-conid'>FreshThings</span> <span class='hs-keyword'>where</span> <a name="line-184"></a> <span class='hs-varid'>nextFresh</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>i</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span> <span class='hs-layout'>{</span> <span class='hs-varid'>fName</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>succ</span> <span class='hs-varid'>i</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span> <a name="line-185"></a> <span class='hs-keyword'>where</span> <a name="line-186"></a> <span class='hs-varid'>i</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fName</span> <span class='hs-varid'>s</span> <a name="line-187"></a> <a name="line-188"></a><a name="instance%20HasFresh%20CtxId%20FreshThings"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>HasFresh</span> <span class='hs-conid'>CtxId</span> <span class='hs-conid'>FreshThings</span> <span class='hs-keyword'>where</span> <a name="line-189"></a> <span class='hs-varid'>nextFresh</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>i</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span> <span class='hs-layout'>{</span> <span class='hs-varid'>fCtx</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>succ</span> <span class='hs-varid'>i</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span> <a name="line-190"></a> <span class='hs-keyword'>where</span> <a name="line-191"></a> <span class='hs-varid'>i</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fCtx</span> <span class='hs-varid'>s</span> <a name="line-192"></a> <a name="line-193"></a><a name="instance%20HasFresh%20Int%20FreshThings"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>HasFresh</span> <span class='hs-conid'>Int</span> <span class='hs-conid'>FreshThings</span> <span class='hs-keyword'>where</span> <a name="line-194"></a> <span class='hs-varid'>nextFresh</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>i</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span> <span class='hs-layout'>{</span> <span class='hs-varid'>fInt</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>succ</span> <span class='hs-varid'>i</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span> <a name="line-195"></a> <span class='hs-keyword'>where</span> <a name="line-196"></a> <span class='hs-varid'>i</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fInt</span> <span class='hs-varid'>s</span> <a name="line-197"></a> <a name="line-198"></a><a name="ProblemId"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>ProblemId</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ProblemId</span> <span class='hs-conid'>Nat</span> <a name="line-199"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Enum</span><span class='hs-layout'>,</span> <span class='hs-conid'>Real</span><span class='hs-layout'>,</span> <span class='hs-conid'>Integral</span><span class='hs-layout'>,</span> <span class='hs-conid'>Num</span><span class='hs-layout'>)</span> <a name="line-200"></a> <a name="line-201"></a><a name="instance%20Show%20ProblemId"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-conid'>ProblemId</span> <span class='hs-keyword'>where</span> <a name="line-202"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>ProblemId</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-varid'>n</span> <a name="line-203"></a> <a name="line-204"></a><a name="instance%20HasFresh%20ProblemId%20FreshThings"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>HasFresh</span> <span class='hs-conid'>ProblemId</span> <span class='hs-conid'>FreshThings</span> <span class='hs-keyword'>where</span> <a name="line-205"></a> <span class='hs-varid'>nextFresh</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>i</span><span class='hs-layout'>,</span> <span class='hs-varid'>s</span> <span class='hs-layout'>{</span> <span class='hs-varid'>fProblem</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>succ</span> <span class='hs-varid'>i</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span> <a name="line-206"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>i</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fProblem</span> <span class='hs-varid'>s</span> <a name="line-207"></a> <a name="line-208"></a><a name="instance%20HasFresh%20i%20TCState"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>HasFresh</span> <span class='hs-varid'>i</span> <span class='hs-conid'>FreshThings</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>HasFresh</span> <span class='hs-varid'>i</span> <span class='hs-conid'>TCState</span> <span class='hs-keyword'>where</span> <a name="line-209"></a> <span class='hs-varid'>nextFresh</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>(,)</span> <span class='hs-varop'>$!</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span> <span class='hs-varop'>$!</span> <span class='hs-varid'>s</span> <span class='hs-layout'>{</span> <span class='hs-varid'>stFreshThings</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f</span> <span class='hs-layout'>}</span> <a name="line-210"></a> <span class='hs-keyword'>where</span> <a name="line-211"></a> <span class='hs-layout'>(</span><span class='hs-varid'>i</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>nextFresh</span> <span class='hs-varop'>$</span> <span class='hs-varid'>stFreshThings</span> <span class='hs-varid'>s</span> <a name="line-212"></a> <a name="line-213"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-214"></a><span class='hs-comment'>-- ** Interface</span> <a name="line-215"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-216"></a> <a name="line-217"></a><a name="ModuleInfo"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ModuleInfo</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ModuleInfo</span> <a name="line-218"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>miInterface</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Interface</span> <a name="line-219"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>miWarnings</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <a name="line-220"></a> <span class='hs-comment'>-- ^ 'True' if warnings were encountered when the module was type</span> <a name="line-221"></a> <span class='hs-comment'>-- checked.</span> <a name="line-222"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>miTimeStamp</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ClockTime</span> <a name="line-223"></a> <span class='hs-comment'>-- ^ The modification time stamp of the interface file when the</span> <a name="line-224"></a> <span class='hs-comment'>-- interface was read or written. Alternatively, if warnings were</span> <a name="line-225"></a> <span class='hs-comment'>-- encountered (in which case there may not be any up-to-date</span> <a name="line-226"></a> <span class='hs-comment'>-- interface file), the time at which the interface was produced</span> <a name="line-227"></a> <span class='hs-comment'>-- (approximately).</span> <a name="line-228"></a> <span class='hs-layout'>}</span> <a name="line-229"></a> <a name="line-230"></a><span class='hs-comment'>-- Note that the use of 'C.TopLevelModuleName' here is a potential</span> <a name="line-231"></a><span class='hs-comment'>-- performance problem, because these names do not contain unique</span> <a name="line-232"></a><span class='hs-comment'>-- identifiers.</span> <a name="line-233"></a> <a name="line-234"></a><a name="VisitedModules"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>VisitedModules</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>TopLevelModuleName</span> <span class='hs-conid'>ModuleInfo</span> <a name="line-235"></a><a name="DecodedModules"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>DecodedModules</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>TopLevelModuleName</span> <span class='hs-layout'>(</span><span class='hs-conid'>Interface</span><span class='hs-layout'>,</span> <span class='hs-conid'>ClockTime</span><span class='hs-layout'>)</span> <a name="line-236"></a> <a name="line-237"></a><a name="Interface"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Interface</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Interface</span> <a name="line-238"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>iImportedModules</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ModuleName</span><span class='hs-keyglyph'>]</span> <a name="line-239"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>iModuleName</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ModuleName</span> <a name="line-240"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>iScope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>ModuleName</span> <span class='hs-conid'>Scope</span> <a name="line-241"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>iInsideScope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ScopeInfo</span> <a name="line-242"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>iSignature</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signature</span> <a name="line-243"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>iBuiltin</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>BuiltinThings</span> <span class='hs-layout'>(</span><span class='hs-conid'>String</span><span class='hs-layout'>,</span> <span class='hs-conid'>QName</span><span class='hs-layout'>)</span> <a name="line-244"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>iHaskellImports</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Set</span> <span class='hs-conid'>String</span> <a name="line-245"></a> <span class='hs-comment'>-- ^ Haskell imports listed in</span> <a name="line-246"></a> <span class='hs-comment'>-- (transitively) imported modules are</span> <a name="line-247"></a> <span class='hs-comment'>-- not included here.</span> <a name="line-248"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>iHighlighting</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>HighlightingInfo</span> <a name="line-249"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>iPragmaOptions</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>OptionsPragma</span><span class='hs-keyglyph'>]</span> <a name="line-250"></a> <span class='hs-comment'>-- ^ Pragma options set in the file.</span> <a name="line-251"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>iPatternSyns</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>PatternSynDefns</span> <a name="line-252"></a> <span class='hs-layout'>}</span> <a name="line-253"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-254"></a> <a name="line-255"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-256"></a><span class='hs-comment'>-- ** Closure</span> <a name="line-257"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-258"></a> <a name="line-259"></a><a name="Closure"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Closure</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Closure</span> <span class='hs-layout'>{</span> <span class='hs-varid'>clSignature</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signature</span> <a name="line-260"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>clEnv</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TCEnv</span> <a name="line-261"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>clScope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ScopeInfo</span> <a name="line-262"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>clValue</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <a name="line-263"></a> <span class='hs-layout'>}</span> <a name="line-264"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-265"></a> <a name="line-266"></a><a name="instance%20Show%20(Closure%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Show</span> <span class='hs-layout'>(</span><span class='hs-conid'>Closure</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-267"></a> <span class='hs-varid'>show</span> <span class='hs-varid'>cl</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"Closure "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-varid'>clValue</span> <span class='hs-varid'>cl</span><span class='hs-layout'>)</span> <a name="line-268"></a> <a name="line-269"></a><a name="instance%20HasRange%20(Closure%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>HasRange</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>HasRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>Closure</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-270"></a> <span class='hs-varid'>getRange</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varop'>.</span> <span class='hs-varid'>clValue</span> <a name="line-271"></a> <a name="line-272"></a><a name="buildClosure"></a><span class='hs-definition'>buildClosure</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Closure</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <a name="line-273"></a><span class='hs-definition'>buildClosure</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <a name="line-274"></a> <span class='hs-varid'>env</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>ask</span> <a name="line-275"></a> <span class='hs-varid'>sig</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>gets</span> <span class='hs-varid'>stSignature</span> <a name="line-276"></a> <span class='hs-varid'>scope</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>gets</span> <span class='hs-varid'>stScope</span> <a name="line-277"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Closure</span> <span class='hs-varid'>sig</span> <span class='hs-varid'>env</span> <span class='hs-varid'>scope</span> <span class='hs-varid'>x</span> <a name="line-278"></a> <a name="line-279"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-280"></a><span class='hs-comment'>-- ** Constraints</span> <a name="line-281"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-282"></a> <a name="line-283"></a><a name="Constraints"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Constraints</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ProblemConstraint</span><span class='hs-keyglyph'>]</span> <a name="line-284"></a> <a name="line-285"></a><a name="ProblemConstraint"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ProblemConstraint</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PConstr</span> <a name="line-286"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>constraintProblem</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ProblemId</span> <a name="line-287"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>theConstraint</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Closure</span> <span class='hs-conid'>Constraint</span> <a name="line-288"></a> <span class='hs-layout'>}</span> <a name="line-289"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-290"></a> <a name="line-291"></a><a name="Constraint"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Constraint</span> <a name="line-292"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ValueCmp</span> <span class='hs-conid'>Comparison</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Term</span> <span class='hs-conid'>Term</span> <a name="line-293"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ElimCmp</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Polarity</span><span class='hs-keyglyph'>]</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Term</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Elim</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Elim</span><span class='hs-keyglyph'>]</span> <a name="line-294"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TypeCmp</span> <span class='hs-conid'>Comparison</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Type</span> <a name="line-295"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TelCmp</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Comparison</span> <span class='hs-conid'>Telescope</span> <span class='hs-conid'>Telescope</span> <span class='hs-comment'>-- ^ the two types are for the error message only</span> <a name="line-296"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SortCmp</span> <span class='hs-conid'>Comparison</span> <span class='hs-conid'>Sort</span> <span class='hs-conid'>Sort</span> <a name="line-297"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LevelCmp</span> <span class='hs-conid'>Comparison</span> <span class='hs-conid'>Level</span> <span class='hs-conid'>Level</span> <a name="line-298"></a><span class='hs-comment'>-- | ShortCut MetaId Term Type</span> <a name="line-299"></a><span class='hs-comment'>-- -- ^ A delayed instantiation. Replaces @ValueCmp@ in 'postponeTypeCheckingProblem'.</span> <a name="line-300"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnBlock</span> <span class='hs-conid'>MetaId</span> <a name="line-301"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Guarded</span> <span class='hs-conid'>Constraint</span> <span class='hs-conid'>ProblemId</span> <a name="line-302"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IsEmpty</span> <span class='hs-conid'>Range</span> <span class='hs-conid'>Type</span> <a name="line-303"></a> <span class='hs-comment'>-- ^ the range is the one of the absurd pattern</span> <a name="line-304"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FindInScope</span> <span class='hs-conid'>MetaId</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>Term</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <a name="line-305"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-306"></a> <a name="line-307"></a><a name="Comparison"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Comparison</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CmpEq</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CmpLeq</span> <a name="line-308"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-309"></a> <a name="line-310"></a><a name="instance%20Show%20Comparison"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-conid'>Comparison</span> <span class='hs-keyword'>where</span> <a name="line-311"></a> <span class='hs-varid'>show</span> <span class='hs-conid'>CmpEq</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"="</span> <a name="line-312"></a> <span class='hs-varid'>show</span> <span class='hs-conid'>CmpLeq</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"=<"</span> <a name="line-313"></a> <a name="line-314"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-315"></a><span class='hs-comment'>-- * Open things</span> <a name="line-316"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-317"></a> <a name="line-318"></a><a name="Open"></a><span class='hs-comment'>-- | A thing tagged with the context it came from.</span> <a name="line-319"></a><a name="Open"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Open</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>OpenThing</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>CtxId</span><span class='hs-keyglyph'>]</span> <span class='hs-varid'>a</span> <a name="line-320"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Functor</span><span class='hs-layout'>)</span> <a name="line-321"></a> <a name="line-322"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-323"></a><span class='hs-comment'>-- * Judgements</span> <a name="line-324"></a><span class='hs-comment'>--</span> <a name="line-325"></a><span class='hs-comment'>-- Used exclusively for typing of meta variables.</span> <a name="line-326"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-327"></a> <a name="line-328"></a><a name="Judgement"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Judgement</span> <span class='hs-varid'>t</span> <span class='hs-varid'>a</span> <a name="line-329"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>HasType</span> <span class='hs-layout'>{</span> <span class='hs-varid'>jMetaId</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>jMetaType</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>t</span> <span class='hs-layout'>}</span> <a name="line-330"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IsSort</span> <span class='hs-layout'>{</span> <span class='hs-varid'>jMetaId</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>jMetaType</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>t</span> <span class='hs-layout'>}</span> <span class='hs-comment'>-- Andreas, 2011-04-26: type needed for higher-order sort metas</span> <a name="line-331"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Functor</span><span class='hs-layout'>,</span> <span class='hs-conid'>Foldable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Traversable</span><span class='hs-layout'>)</span> <a name="line-332"></a> <a name="line-333"></a><a name="instance%20Show%20(Judgement%20t%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span> <span class='hs-varid'>t</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Show</span> <span class='hs-layout'>(</span><span class='hs-conid'>Judgement</span> <span class='hs-varid'>t</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-334"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>HasType</span> <span class='hs-varid'>a</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-varid'>a</span> <span class='hs-varop'>++</span> <span class='hs-str'>" : "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>t</span> <a name="line-335"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>IsSort</span> <span class='hs-varid'>a</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-varid'>a</span> <span class='hs-varop'>++</span> <span class='hs-str'>" :sort "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>t</span> <a name="line-336"></a> <a name="line-337"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-338"></a><span class='hs-comment'>-- ** Meta variables</span> <a name="line-339"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-340"></a> <a name="line-341"></a><a name="MetaVariable"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>MetaVariable</span> <span class='hs-keyglyph'>=</span> <a name="line-342"></a> <span class='hs-conid'>MetaVar</span> <span class='hs-layout'>{</span> <span class='hs-varid'>mvInfo</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaInfo</span> <a name="line-343"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>mvPriority</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaPriority</span> <span class='hs-comment'>-- ^ some metavariables are more eager to be instantiated</span> <a name="line-344"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>mvPermutation</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Permutation</span> <a name="line-345"></a> <span class='hs-comment'>-- ^ a metavariable doesn't have to depend on all variables</span> <a name="line-346"></a> <span class='hs-comment'>-- in the context, this "permutation" will throw away the</span> <a name="line-347"></a> <span class='hs-comment'>-- ones it does not depend on</span> <a name="line-348"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>mvJudgement</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Judgement</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>MetaId</span> <a name="line-349"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>mvInstantiation</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaInstantiation</span> <a name="line-350"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>mvListeners</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Set</span> <span class='hs-conid'>Listener</span> <span class='hs-comment'>-- ^ meta variables scheduled for eta-expansion but blocked by this one</span> <a name="line-351"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>mvFrozen</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Frozen</span> <span class='hs-comment'>-- ^ are we past the point where we can instantiate this meta variable?</span> <a name="line-352"></a> <span class='hs-layout'>}</span> <a name="line-353"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-354"></a> <a name="line-355"></a><a name="Listener"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Listener</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>EtaExpand</span> <span class='hs-conid'>MetaId</span> <a name="line-356"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckConstraint</span> <span class='hs-conid'>Nat</span> <span class='hs-conid'>ProblemConstraint</span> <a name="line-357"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-358"></a> <a name="line-359"></a><a name="instance%20Eq%20Listener"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Eq</span> <span class='hs-conid'>Listener</span> <span class='hs-keyword'>where</span> <a name="line-360"></a> <span class='hs-conid'>EtaExpand</span> <span class='hs-varid'>x</span> <span class='hs-varop'>==</span> <span class='hs-conid'>EtaExpand</span> <span class='hs-varid'>y</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-varop'>==</span> <span class='hs-varid'>y</span> <a name="line-361"></a> <span class='hs-conid'>CheckConstraint</span> <span class='hs-varid'>x</span> <span class='hs-keyword'>_</span> <span class='hs-varop'>==</span> <span class='hs-conid'>CheckConstraint</span> <span class='hs-varid'>y</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-varop'>==</span> <span class='hs-varid'>y</span> <a name="line-362"></a> <span class='hs-keyword'>_</span> <span class='hs-varop'>==</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-363"></a> <a name="line-364"></a><a name="instance%20Ord%20Listener"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Ord</span> <span class='hs-conid'>Listener</span> <span class='hs-keyword'>where</span> <a name="line-365"></a> <span class='hs-conid'>EtaExpand</span> <span class='hs-varid'>x</span> <span class='hs-varop'>`compare`</span> <span class='hs-conid'>EtaExpand</span> <span class='hs-varid'>y</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-varop'>`compare`</span> <span class='hs-varid'>y</span> <a name="line-366"></a> <span class='hs-conid'>CheckConstraint</span> <span class='hs-varid'>x</span> <span class='hs-keyword'>_</span> <span class='hs-varop'>`compare`</span> <span class='hs-conid'>CheckConstraint</span> <span class='hs-varid'>y</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-varop'>`compare`</span> <span class='hs-varid'>y</span> <a name="line-367"></a> <span class='hs-conid'>EtaExpand</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-varop'>`compare`</span> <span class='hs-conid'>CheckConstraint</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LT</span> <a name="line-368"></a> <span class='hs-conid'>CheckConstraint</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-varop'>`compare`</span> <span class='hs-conid'>EtaExpand</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Prelude</span><span class='hs-varop'>.</span><span class='hs-conid'>GT</span> <a name="line-369"></a> <a name="line-370"></a><a name="Frozen"></a><span class='hs-comment'>-- | Frozen meta variable cannot be instantiated by unification.</span> <a name="line-371"></a><a name="Frozen"></a><span class='hs-comment'>-- This serves to prevent the completion of a definition by its use</span> <a name="line-372"></a><a name="Frozen"></a><span class='hs-comment'>-- outside of the current block.</span> <a name="line-373"></a><a name="Frozen"></a><span class='hs-comment'>-- (See issues 118, 288, 399).</span> <a name="line-374"></a><a name="Frozen"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Frozen</span> <a name="line-375"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Frozen</span> <span class='hs-comment'>-- ^ Do not instantiate.</span> <a name="line-376"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Instantiable</span> <a name="line-377"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-378"></a> <a name="line-379"></a><a name="MetaInstantiation"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>MetaInstantiation</span> <a name="line-380"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>InstV</span> <span class='hs-conid'>Term</span> <span class='hs-comment'>-- ^ solved by term</span> <a name="line-381"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InstS</span> <span class='hs-conid'>Term</span> <span class='hs-comment'>-- ^ solved by @Lam .. Sort s@</span> <a name="line-382"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Open</span> <span class='hs-comment'>-- ^ unsolved</span> <a name="line-383"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OpenIFS</span> <span class='hs-comment'>-- ^ open, to be instantiated as "implicit from scope"</span> <a name="line-384"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BlockedConst</span> <span class='hs-conid'>Term</span> <span class='hs-comment'>-- ^ solution blocked by unsolved constraints</span> <a name="line-385"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PostponedTypeCheckingProblem</span> <span class='hs-layout'>(</span><span class='hs-conid'>Closure</span> <span class='hs-layout'>(</span><span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-layout'>,</span> <span class='hs-conid'>TCM</span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-386"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-387"></a> <a name="line-388"></a><a name="instance%20Show%20MetaInstantiation"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-conid'>MetaInstantiation</span> <span class='hs-keyword'>where</span> <a name="line-389"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>InstV</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"InstV ("</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>t</span> <span class='hs-varop'>++</span> <span class='hs-str'>")"</span> <a name="line-390"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>InstS</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"InstS ("</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>s</span> <span class='hs-varop'>++</span> <span class='hs-str'>")"</span> <a name="line-391"></a> <span class='hs-varid'>show</span> <span class='hs-conid'>Open</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"Open"</span> <a name="line-392"></a> <span class='hs-varid'>show</span> <span class='hs-conid'>OpenIFS</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"OpenIFS"</span> <a name="line-393"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>BlockedConst</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"BlockedConst ("</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>t</span> <span class='hs-varop'>++</span> <span class='hs-str'>")"</span> <a name="line-394"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>PostponedTypeCheckingProblem</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"PostponedTypeCheckingProblem (...)"</span> <a name="line-395"></a> <a name="line-396"></a><a name="MetaPriority"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>MetaPriority</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MetaPriority</span> <span class='hs-conid'>Int</span> <a name="line-397"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-398"></a> <a name="line-399"></a><a name="RunMetaOccursCheck"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>RunMetaOccursCheck</span> <a name="line-400"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>RunMetaOccursCheck</span> <a name="line-401"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DontRunMetaOccursCheck</span> <a name="line-402"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-403"></a> <a name="line-404"></a><a name="MetaInfo"></a><span class='hs-comment'>-- | @MetaInfo@ is cloned from one meta to the next during pruning.</span> <a name="line-405"></a><a name="MetaInfo"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>MetaInfo</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MetaInfo</span> <a name="line-406"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>miClosRange</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Closure</span> <span class='hs-conid'>Range</span> <span class='hs-comment'>-- TODO: Not so nice. But we want both to have the environment of the meta (Closure) and its range.</span> <a name="line-407"></a><span class='hs-comment'>-- , miRelevance :: Relevance -- ^ Created in irrelevant position?</span> <a name="line-408"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>miMetaOccursCheck</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>RunMetaOccursCheck</span> <span class='hs-comment'>-- ^ Run the extended occurs check that goes in definitions?</span> <a name="line-409"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>miNameSuggestion</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaNameSuggestion</span> <a name="line-410"></a> <span class='hs-comment'>-- ^ Used for printing.</span> <a name="line-411"></a> <span class='hs-comment'>-- @Just x@ if meta-variable comes from omitted argument with name @x@.</span> <a name="line-412"></a> <span class='hs-layout'>}</span> <a name="line-413"></a> <a name="line-414"></a><a name="MetaNameSuggestion"></a><span class='hs-comment'>-- | Name suggestion for meta variable. Empty string means no suggestion.</span> <a name="line-415"></a><a name="MetaNameSuggestion"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>MetaNameSuggestion</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>String</span> <a name="line-416"></a> <a name="line-417"></a><a name="NamedMeta"></a><span class='hs-comment'>-- | For printing, we couple a meta with its name suggestion.</span> <a name="line-418"></a><a name="NamedMeta"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>NamedMeta</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NamedMeta</span> <a name="line-419"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>nmSuggestion</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaNameSuggestion</span> <a name="line-420"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>nmid</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaId</span> <a name="line-421"></a> <span class='hs-layout'>}</span> <a name="line-422"></a> <a name="line-423"></a><a name="instance%20Show%20NamedMeta"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-conid'>NamedMeta</span> <span class='hs-keyword'>where</span> <a name="line-424"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>NamedMeta</span> <span class='hs-str'>""</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-varid'>x</span> <a name="line-425"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>NamedMeta</span> <span class='hs-varid'>s</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"_"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>s</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>x</span> <a name="line-426"></a> <a name="line-427"></a><a name="MetaStore"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>MetaStore</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>MetaId</span> <span class='hs-conid'>MetaVariable</span> <a name="line-428"></a> <a name="line-429"></a><a name="instance%20HasRange%20MetaVariable"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>HasRange</span> <span class='hs-conid'>MetaVariable</span> <span class='hs-keyword'>where</span> <a name="line-430"></a> <span class='hs-varid'>getRange</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varop'>$</span> <span class='hs-varid'>getMetaInfo</span> <span class='hs-varid'>m</span> <a name="line-431"></a> <a name="line-432"></a><a name="instance%20SetRange%20MetaVariable"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>SetRange</span> <span class='hs-conid'>MetaVariable</span> <span class='hs-keyword'>where</span> <a name="line-433"></a> <span class='hs-varid'>setRange</span> <span class='hs-varid'>r</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>m</span> <span class='hs-layout'>{</span> <span class='hs-varid'>mvInfo</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>mvInfo</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <a name="line-434"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>miClosRange</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>miClosRange</span> <span class='hs-layout'>(</span><span class='hs-varid'>mvInfo</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-435"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>clValue</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span> <span class='hs-layout'>}</span><span class='hs-layout'>}</span><span class='hs-layout'>}</span> <a name="line-436"></a> <a name="line-437"></a><a name="normalMetaPriority"></a><span class='hs-definition'>normalMetaPriority</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaPriority</span> <a name="line-438"></a><span class='hs-definition'>normalMetaPriority</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MetaPriority</span> <span class='hs-num'>0</span> <a name="line-439"></a> <a name="line-440"></a><a name="lowMetaPriority"></a><span class='hs-definition'>lowMetaPriority</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaPriority</span> <a name="line-441"></a><span class='hs-definition'>lowMetaPriority</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MetaPriority</span> <span class='hs-layout'>(</span><span class='hs-comment'>-</span><span class='hs-num'>10</span><span class='hs-layout'>)</span> <a name="line-442"></a> <a name="line-443"></a><a name="highMetaPriority"></a><span class='hs-definition'>highMetaPriority</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaPriority</span> <a name="line-444"></a><span class='hs-definition'>highMetaPriority</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MetaPriority</span> <span class='hs-num'>10</span> <a name="line-445"></a> <a name="line-446"></a><a name="getMetaInfo"></a><span class='hs-definition'>getMetaInfo</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaVariable</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Closure</span> <span class='hs-conid'>Range</span> <a name="line-447"></a><span class='hs-definition'>getMetaInfo</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>miClosRange</span> <span class='hs-varop'>.</span> <span class='hs-varid'>mvInfo</span> <a name="line-448"></a> <a name="line-449"></a><a name="getMetaScope"></a><span class='hs-definition'>getMetaScope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaVariable</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>ScopeInfo</span> <a name="line-450"></a><span class='hs-definition'>getMetaScope</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>clScope</span> <span class='hs-varop'>$</span> <span class='hs-varid'>getMetaInfo</span> <span class='hs-varid'>m</span> <a name="line-451"></a> <a name="line-452"></a><a name="getMetaEnv"></a><span class='hs-definition'>getMetaEnv</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaVariable</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCEnv</span> <a name="line-453"></a><span class='hs-definition'>getMetaEnv</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>clEnv</span> <span class='hs-varop'>$</span> <span class='hs-varid'>getMetaInfo</span> <span class='hs-varid'>m</span> <a name="line-454"></a> <a name="line-455"></a><a name="getMetaSig"></a><span class='hs-definition'>getMetaSig</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaVariable</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Signature</span> <a name="line-456"></a><span class='hs-definition'>getMetaSig</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>clSignature</span> <span class='hs-varop'>$</span> <span class='hs-varid'>getMetaInfo</span> <span class='hs-varid'>m</span> <a name="line-457"></a> <a name="line-458"></a><a name="getMetaRelevance"></a><span class='hs-definition'>getMetaRelevance</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MetaVariable</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Relevance</span> <a name="line-459"></a><span class='hs-definition'>getMetaRelevance</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>envRelevance</span> <span class='hs-varop'>.</span> <span class='hs-varid'>getMetaEnv</span> <a name="line-460"></a> <a name="line-461"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-462"></a><span class='hs-comment'>-- ** Interaction meta variables</span> <a name="line-463"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-464"></a> <a name="line-465"></a><a name="InteractionPoints"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>InteractionPoints</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>InteractionId</span> <span class='hs-conid'>MetaId</span> <a name="line-466"></a> <a name="line-467"></a><a name="InteractionId"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>InteractionId</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>InteractionId</span> <span class='hs-conid'>Nat</span> <a name="line-468"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span><span class='hs-conid'>Ord</span><span class='hs-layout'>,</span><span class='hs-conid'>Num</span><span class='hs-layout'>,</span><span class='hs-conid'>Integral</span><span class='hs-layout'>,</span><span class='hs-conid'>Real</span><span class='hs-layout'>,</span><span class='hs-conid'>Enum</span><span class='hs-layout'>)</span> <a name="line-469"></a> <a name="line-470"></a><a name="instance%20Show%20InteractionId"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-conid'>InteractionId</span> <span class='hs-keyword'>where</span> <a name="line-471"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>InteractionId</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"?"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>x</span> <a name="line-472"></a> <a name="line-473"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-474"></a><span class='hs-comment'>-- ** Signature</span> <a name="line-475"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-476"></a> <a name="line-477"></a><a name="Signature"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Signature</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Sig</span> <a name="line-478"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>sigSections</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Sections</span> <a name="line-479"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>sigDefinitions</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Definitions</span> <a name="line-480"></a> <span class='hs-layout'>}</span> <a name="line-481"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-482"></a> <a name="line-483"></a><a name="Sections"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Sections</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>ModuleName</span> <span class='hs-conid'>Section</span> <a name="line-484"></a><a name="Definitions"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Definitions</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>HashMap</span> <span class='hs-conid'>QName</span> <span class='hs-conid'>Definition</span> <a name="line-485"></a> <a name="line-486"></a><a name="Section"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Section</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Section</span> <a name="line-487"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>secTelescope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Telescope</span> <a name="line-488"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>secFreeVars</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Nat</span> <span class='hs-comment'>-- ^ This is the number of parameters when</span> <a name="line-489"></a> <span class='hs-comment'>-- we're inside the section and 0</span> <a name="line-490"></a> <span class='hs-comment'>-- outside. It's used to know how much of</span> <a name="line-491"></a> <span class='hs-comment'>-- the context to apply function from the</span> <a name="line-492"></a> <span class='hs-comment'>-- section to when translating from</span> <a name="line-493"></a> <span class='hs-comment'>-- abstract to internal syntax.</span> <a name="line-494"></a> <span class='hs-layout'>}</span> <a name="line-495"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-496"></a> <a name="line-497"></a><a name="emptySignature"></a><span class='hs-definition'>emptySignature</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signature</span> <a name="line-498"></a><span class='hs-definition'>emptySignature</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Sig</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <span class='hs-conid'>HMap</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-499"></a> <a name="line-500"></a><a name="DisplayForm"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>DisplayForm</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Display</span> <span class='hs-conid'>Nat</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Term</span><span class='hs-keyglyph'>]</span> <span class='hs-conid'>DisplayTerm</span> <a name="line-501"></a> <span class='hs-comment'>-- ^ The three arguments are:</span> <a name="line-502"></a> <span class='hs-comment'>--</span> <a name="line-503"></a> <span class='hs-comment'>-- * @n@: number of free variables;</span> <a name="line-504"></a> <span class='hs-comment'>--</span> <a name="line-505"></a> <span class='hs-comment'>-- * Patterns for arguments, one extra free var which</span> <a name="line-506"></a> <span class='hs-comment'>-- represents pattern vars. There should @n@ of them.</span> <a name="line-507"></a> <span class='hs-comment'>--</span> <a name="line-508"></a> <span class='hs-comment'>-- * Display form. @n@ free variables.</span> <a name="line-509"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-510"></a> <a name="line-511"></a><a name="DisplayTerm"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>DisplayTerm</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>DWithApp</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>DisplayTerm</span><span class='hs-keyglyph'>]</span> <span class='hs-conid'>Args</span> <a name="line-512"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DCon</span> <span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>DisplayTerm</span><span class='hs-keyglyph'>]</span> <a name="line-513"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DDef</span> <span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>DisplayTerm</span><span class='hs-keyglyph'>]</span> <a name="line-514"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DDot</span> <span class='hs-conid'>Term</span> <a name="line-515"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DTerm</span> <span class='hs-conid'>Term</span> <a name="line-516"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-517"></a> <a name="line-518"></a><a name="defaultDisplayForm"></a><span class='hs-definition'>defaultDisplayForm</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>QName</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Open</span> <span class='hs-conid'>DisplayForm</span><span class='hs-keyglyph'>]</span> <a name="line-519"></a><span class='hs-definition'>defaultDisplayForm</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span> <a name="line-520"></a> <a name="line-521"></a><a name="Definition"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Definition</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Defn</span> <a name="line-522"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>defRelevance</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Relevance</span> <span class='hs-comment'>-- ^ Some defs can be irrelevant (but not hidden).</span> <a name="line-523"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>defName</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>QName</span> <a name="line-524"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>defType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span> <span class='hs-comment'>-- ^ Type of the lifted definition.</span> <a name="line-525"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>defPolarity</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Polarity</span><span class='hs-keyglyph'>]</span> <a name="line-526"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>defArgOccurrences</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Occurrence</span><span class='hs-keyglyph'>]</span> <a name="line-527"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>defDisplay</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Open</span> <span class='hs-conid'>DisplayForm</span><span class='hs-keyglyph'>]</span> <a name="line-528"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>defMutual</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MutualId</span> <a name="line-529"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>defCompiledRep</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CompiledRepresentation</span> <a name="line-530"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>theDef</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Defn</span> <a name="line-531"></a> <span class='hs-layout'>}</span> <a name="line-532"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-533"></a> <a name="line-534"></a><a name="HaskellCode"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>HaskellCode</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>String</span> <a name="line-535"></a><a name="HaskellType"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>HaskellType</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>String</span> <a name="line-536"></a><a name="EpicCode"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>EpicCode</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>String</span> <a name="line-537"></a><a name="JSCode"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>JSCode</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>JS</span><span class='hs-varop'>.</span><span class='hs-conid'>Exp</span> <a name="line-538"></a> <a name="line-539"></a><a name="HaskellRepresentation"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>HaskellRepresentation</span> <a name="line-540"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>HsDefn</span> <span class='hs-conid'>HaskellType</span> <span class='hs-conid'>HaskellCode</span> <a name="line-541"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsType</span> <span class='hs-conid'>HaskellType</span> <a name="line-542"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-543"></a> <a name="line-544"></a><a name="Polarity"></a><span class='hs-comment'>-- | Polarity for equality and subtype checking.</span> <a name="line-545"></a><a name="Polarity"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Polarity</span> <a name="line-546"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Covariant</span> <span class='hs-comment'>-- ^ monotone</span> <a name="line-547"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Contravariant</span> <span class='hs-comment'>-- ^ antitone</span> <a name="line-548"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Invariant</span> <span class='hs-comment'>-- ^ no information (mixed variance)</span> <a name="line-549"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Nonvariant</span> <span class='hs-comment'>-- ^ constant</span> <a name="line-550"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span> <a name="line-551"></a> <a name="line-552"></a><a name="CompiledRepresentation"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>CompiledRepresentation</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CompiledRep</span> <a name="line-553"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>compiledHaskell</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>HaskellRepresentation</span> <a name="line-554"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compiledEpic</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>EpicCode</span> <a name="line-555"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compiledJS</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>JSCode</span> <a name="line-556"></a> <span class='hs-layout'>}</span> <a name="line-557"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-558"></a> <a name="line-559"></a><a name="noCompiledRep"></a><span class='hs-definition'>noCompiledRep</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CompiledRepresentation</span> <a name="line-560"></a><span class='hs-definition'>noCompiledRep</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CompiledRep</span> <span class='hs-conid'>Nothing</span> <span class='hs-conid'>Nothing</span> <span class='hs-conid'>Nothing</span> <a name="line-561"></a> <a name="line-562"></a><a name="Occurrence"></a><span class='hs-comment'>-- | Subterm occurrences for positivity checking.</span> <a name="line-563"></a><a name="Occurrence"></a><span class='hs-comment'>-- The constructors are listed in increasing information they provide:</span> <a name="line-564"></a><a name="Occurrence"></a><span class='hs-comment'>-- @Mixed <= JustPos <= StrictPos <= GuardPos <= Unused@</span> <a name="line-565"></a><a name="Occurrence"></a><span class='hs-comment'>-- @Mixed <= JustNeg <= Unused@.</span> <a name="line-566"></a><a name="Occurrence"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Occurrence</span> <a name="line-567"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mixed</span> <span class='hs-comment'>-- ^ Arbitrary occurrence (positive and negative).</span> <a name="line-568"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>JustNeg</span> <span class='hs-comment'>-- ^ Negative occurrence.</span> <a name="line-569"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>JustPos</span> <span class='hs-comment'>-- ^ Positive occurrence, but not strictly positive.</span> <a name="line-570"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>StrictPos</span> <span class='hs-comment'>-- ^ Strictly positive occurrence.</span> <a name="line-571"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GuardPos</span> <span class='hs-comment'>-- ^ Guarded strictly positive occurrence (i.e., under ∞). For checking recursive records.</span> <a name="line-572"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Unused</span> <span class='hs-comment'>-- ^ No occurrence.</span> <a name="line-573"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span> <a name="line-574"></a> <a name="line-575"></a><a name="instance%20NFData%20Occurrence%20data%20Defn%20=%20Axiom%20%7c%20Function%20%7b%20funClauses%20::%20%5bClause%5d%20,%20funCompiled%20::%20CompiledClauses%20,%20funInv%20::%20FunctionInverse%20%7b-%20MOVED%20to%20Definition%20,%20funPolarity%20::%20%5bPolarity%5d%20,%20funArgOccurrences%20::%20%5bOccurrence%5d%20-%7d%20,%20funMutual%20::%20%5bQName%5d%20--%20%5e%20Mutually%20recursive%20functions,%20@data@s%20and%20@record@s.%20,%20funAbstr%20::%20IsAbstract%20,%20funDelayed%20::%20Delayed%20--%20%5e%20Are%20the%20clauses%20of%20this%20definition%20delayed?%20,%20funProjection%20::%20Maybe%20(QName,%20Int)%20--%20%5e%20Is%20it%20a%20record%20projection?%20--%20If%20yes,%20then%20return%20the%20name%20of%20the%20record%20type%20and%20index%20of%20--%20the%20record%20argument.%20Start%20counting%20with%201,%20because%200%20means%20that%20--%20it%20is%20already%20applied%20to%20the%20record.%20(Can%20happen%20in%20module%20--%20instantiation.)%20This%20information%20is%20used%20in%20the%20termination%20--%20checker.%20,%20funStatic%20::%20Bool%20--%20%5e%20Should%20calls%20to%20this%20function%20be%20normalised%20at%20compile-time?%20,%20funCopy%20::%20Bool%20--%20%5e%20Has%20this%20function%20been%20created%20by%20a%20module%20--%20instantiation?%20,%20funTerminates%20::%20Maybe%20Bool%20--%20%5e%20Has%20this%20function%20been%20termination%20checked?%20Did%20it%20pass?%20%7d%20%7c%20Datatype%20%7b%20dataPars%20::%20Nat%20--%20nof%20parameters%20,%20dataIxs%20::%20Nat%20--%20nof%20indices%20,%20dataInduction%20::%20Induction%20--%20data%20or%20codata?%20,%20dataClause%20::%20(Maybe%20Clause)%20--%20this%20might%20be%20in%20an%20instantiated%20module%20,%20dataCons%20::%20%5bQName%5d%20--%20constructor%20names%20,%20dataSort%20::%20Sort%20%7b-%20MOVED%20,%20dataPolarity%20::%20%5bPolarity%5d%20,%20dataArgOccurrences%20::%20%5bOccurrence%5d%20-%7d%20,%20dataMutual%20::%20%5bQName%5d%20--%20%5e%20Mutually%20recursive%20functions,%20@data@s%20and%20@record@s.%20,%20dataAbstr%20::%20IsAbstract%20%7d%20%7c%20Record%20%7b%20recPars%20::%20Nat%20--%20%5e%20Number%20of%20parameters.%20,%20recClause%20::%20Maybe%20Clause%20,%20recCon%20::%20QName%20--%20%5e%20Constructor%20name.%20,%20recNamedCon%20::%20Bool%20,%20recConType%20::%20Type%20--%20%5e%20The%20record%20constructor's%20type.%20,%20recFields%20::%20%5bArg%20A.QName%5d%20,%20recTel%20::%20Telescope%20--%20%5e%20The%20record%20field%20telescope%20%7b-%20MOVED%20,%20recPolarity%20::%20%5bPolarity%5d%20,%20recArgOccurrences%20::%20%5bOccurrence%5d%20-%7d%20,%20recMutual%20::%20%5bQName%5d%20--%20%5e%20Mutually%20recursive%20functions,%20@data@s%20and%20@record@s.%20,%20recEtaEquality%20::%20Bool%20--%20%5e%20Eta-expand%20at%20this%20record%20type.%20@False@%20for%20unguarded%20recursive%20records.%20,%20recInduction%20::%20Induction%20--%20%5e%20'Inductive'%20or%20'Coinductive'?%20Matters%20only%20for%20recursive%20records.%20,%20recRecursive%20::%20Bool%20--%20%5e%20Recursive%20record.%20Implies%20@recEtaEquality%20=%20False@.%20Projections%20are%20not%20size-preserving.%20,%20recAbstr%20::%20IsAbstract%20%7d%20%7c%20Constructor%20%7b%20conPars%20::%20Nat%20--%20nof%20parameters%20,%20conSrcCon%20::%20QName%20--%20original%20constructor%20(this%20might%20be%20in%20a%20module%20instance)%20,%20conData%20::%20QName%20--%20name%20of%20datatype%20or%20record%20type%20,%20conAbstr%20::%20IsAbstract%20,%20conInd%20::%20Induction%20--%20%5e%20Inductive%20or%20coinductive?%20%7d%20%7c%20Primitive%20%7b%20primAbstr%20::%20IsAbstract%20,%20primName%20::%20String%20,%20primClauses%20::%20Maybe%20%5bClause%5d%20--%20%5e%20'Nothing'%20for%20primitive%20functions,%20@'Just'%20--%20something@%20for%20builtin%20functions.%20,%20primCompiled%20::%20Maybe%20CompiledClauses%20--%20%5e%20'Nothing'%20for%20primitive%20functions,%20@'Just'%20--%20something@%20for%20builtin%20functions.%20%7d%20--%20%5e%20Primitive%20or%20builtin%20functions.%20deriving%20(Typeable,%20Show)%20defIsRecord%20::%20Defn%20-%3e%20Bool%20defIsRecord%20Record%7b%7d%20=%20True%20defIsRecord%20_%20=%20False%20defIsDataOrRecord%20::%20Defn%20-%3e%20Bool%20defIsDataOrRecord%20Record%7b%7d%20=%20True%20defIsDataOrRecord%20Datatype%7b%7d%20=%20True%20defIsDataOrRecord%20_%20=%20False%20newtype%20Fields%20=%20Fields%20%5b(C.Name,%20Type)%5d%20deriving%20(Typeable)%20data%20Reduced%20no%20yes%20=%20NoReduction%20no%20%7c%20YesReduction%20yes%20deriving%20(Typeable,%20Functor)%20data%20IsReduced%20=%20NotReduced%20%7c%20Reduced%20(Blocked%20())%20data%20MaybeReduced%20a%20=%20MaybeRed%20%7b%20isReduced%20::%20IsReduced%20,%20ignoreReduced%20::%20a%20%7d%20deriving%20(Functor)%20type%20MaybeReducedArgs%20=%20%5bMaybeReduced%20(Arg%20Term)%5d%20notReduced%20::%20a%20-%3e%20MaybeReduced%20a%20notReduced%20x%20=%20MaybeRed%20NotReduced%20x%20reduced%20::%20Blocked%20(Arg%20Term)%20-%3e%20MaybeReduced%20(Arg%20Term)%20reduced%20b%20=%20case%20fmap%20ignoreSharing%20%3c$%3e%20b%20of%20NotBlocked%20(Arg%20_%20_%20(MetaV%20x%20_))%20-%3e%20MaybeRed%20(Reduced%20$%20Blocked%20x%20())%20v%20_%20-%3e%20MaybeRed%20(Reduced%20$%20()%20%3c$%20b)%20v"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>NFData</span> <span class='hs-conid'>Occurrence</span> <a name="line-576"></a> <a name="line-577"></a><a name="Defn"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Defn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Axiom</span> <a name="line-578"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Function</span> <a name="line-579"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>funClauses</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Clause</span><span class='hs-keyglyph'>]</span> <a name="line-580"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>funCompiled</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CompiledClauses</span> <a name="line-581"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>funInv</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FunctionInverse</span> <a name="line-582"></a><span class='hs-comment'>{- MOVED to Definition <a name="line-583"></a> , funPolarity :: [Polarity] <a name="line-584"></a> , funArgOccurrences :: [Occurrence] <a name="line-585"></a>-}</span> <a name="line-586"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>funMutual</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>QName</span><span class='hs-keyglyph'>]</span> <a name="line-587"></a> <span class='hs-comment'>-- ^ Mutually recursive functions, @data@s and @record@s.</span> <a name="line-588"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>funAbstr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IsAbstract</span> <a name="line-589"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>funDelayed</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Delayed</span> <a name="line-590"></a> <span class='hs-comment'>-- ^ Are the clauses of this definition delayed?</span> <a name="line-591"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>funProjection</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>QName</span><span class='hs-layout'>,</span> <span class='hs-conid'>Int</span><span class='hs-layout'>)</span> <a name="line-592"></a> <span class='hs-comment'>-- ^ Is it a record projection?</span> <a name="line-593"></a> <span class='hs-comment'>-- If yes, then return the name of the record type and index of</span> <a name="line-594"></a> <span class='hs-comment'>-- the record argument. Start counting with 1, because 0 means that</span> <a name="line-595"></a> <span class='hs-comment'>-- it is already applied to the record. (Can happen in module</span> <a name="line-596"></a> <span class='hs-comment'>-- instantiation.) This information is used in the termination</span> <a name="line-597"></a> <span class='hs-comment'>-- checker.</span> <a name="line-598"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>funStatic</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <a name="line-599"></a> <span class='hs-comment'>-- ^ Should calls to this function be normalised at compile-time?</span> <a name="line-600"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>funCopy</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <a name="line-601"></a> <span class='hs-comment'>-- ^ Has this function been created by a module</span> <a name="line-602"></a> <span class='hs-comment'>-- instantiation?</span> <a name="line-603"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>funTerminates</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Bool</span> <a name="line-604"></a> <span class='hs-comment'>-- ^ Has this function been termination checked? Did it pass?</span> <a name="line-605"></a> <span class='hs-layout'>}</span> <a name="line-606"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Datatype</span> <a name="line-607"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>dataPars</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Nat</span> <span class='hs-comment'>-- nof parameters</span> <a name="line-608"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>dataIxs</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Nat</span> <span class='hs-comment'>-- nof indices</span> <a name="line-609"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>dataInduction</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Induction</span> <span class='hs-comment'>-- data or codata?</span> <a name="line-610"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>dataClause</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Clause</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- this might be in an instantiated module</span> <a name="line-611"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>dataCons</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>QName</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- constructor names</span> <a name="line-612"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>dataSort</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Sort</span> <a name="line-613"></a><span class='hs-comment'>{- MOVED <a name="line-614"></a> , dataPolarity :: [Polarity] <a name="line-615"></a> , dataArgOccurrences :: [Occurrence] <a name="line-616"></a>-}</span> <a name="line-617"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>dataMutual</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>QName</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Mutually recursive functions, @data@s and @record@s.</span> <a name="line-618"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>dataAbstr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IsAbstract</span> <a name="line-619"></a> <span class='hs-layout'>}</span> <a name="line-620"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Record</span> <a name="line-621"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>recPars</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Nat</span> <span class='hs-comment'>-- ^ Number of parameters.</span> <a name="line-622"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>recClause</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Clause</span> <a name="line-623"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>recCon</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>QName</span> <span class='hs-comment'>-- ^ Constructor name.</span> <a name="line-624"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>recNamedCon</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <a name="line-625"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>recConType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span> <span class='hs-comment'>-- ^ The record constructor's type.</span> <a name="line-626"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>recFields</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span><span class='hs-keyglyph'>]</span> <a name="line-627"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>recTel</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Telescope</span> <span class='hs-comment'>-- ^ The record field telescope</span> <a name="line-628"></a><span class='hs-comment'>{- MOVED <a name="line-629"></a> , recPolarity :: [Polarity] <a name="line-630"></a> , recArgOccurrences :: [Occurrence] <a name="line-631"></a>-}</span> <a name="line-632"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>recMutual</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>QName</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Mutually recursive functions, @data@s and @record@s.</span> <a name="line-633"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>recEtaEquality</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <span class='hs-comment'>-- ^ Eta-expand at this record type. @False@ for unguarded recursive records.</span> <a name="line-634"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>recInduction</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Induction</span> <span class='hs-comment'>-- ^ 'Inductive' or 'Coinductive'? Matters only for recursive records.</span> <a name="line-635"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>recRecursive</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <span class='hs-comment'>-- ^ Recursive record. Implies @recEtaEquality = False@. Projections are not size-preserving.</span> <a name="line-636"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>recAbstr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IsAbstract</span> <a name="line-637"></a> <span class='hs-layout'>}</span> <a name="line-638"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Constructor</span> <a name="line-639"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>conPars</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Nat</span> <span class='hs-comment'>-- nof parameters</span> <a name="line-640"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>conSrcCon</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>QName</span> <span class='hs-comment'>-- original constructor (this might be in a module instance)</span> <a name="line-641"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>conData</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>QName</span> <span class='hs-comment'>-- name of datatype or record type</span> <a name="line-642"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>conAbstr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IsAbstract</span> <a name="line-643"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>conInd</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Induction</span> <span class='hs-comment'>-- ^ Inductive or coinductive?</span> <a name="line-644"></a> <span class='hs-layout'>}</span> <a name="line-645"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Primitive</span> <a name="line-646"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>primAbstr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IsAbstract</span> <a name="line-647"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>primName</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <a name="line-648"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>primClauses</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Clause</span><span class='hs-keyglyph'>]</span> <a name="line-649"></a> <span class='hs-comment'>-- ^ 'Nothing' for primitive functions, @'Just'</span> <a name="line-650"></a> <span class='hs-comment'>-- something@ for builtin functions.</span> <a name="line-651"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>primCompiled</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>CompiledClauses</span> <a name="line-652"></a> <span class='hs-comment'>-- ^ 'Nothing' for primitive functions, @'Just'</span> <a name="line-653"></a> <span class='hs-comment'>-- something@ for builtin functions.</span> <a name="line-654"></a> <span class='hs-layout'>}</span> <a name="line-655"></a> <span class='hs-comment'>-- ^ Primitive or builtin functions.</span> <a name="line-656"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-657"></a> <a name="line-658"></a><a name="defIsRecord"></a><span class='hs-definition'>defIsRecord</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Defn</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-659"></a><span class='hs-definition'>defIsRecord</span> <span class='hs-conid'>Record</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-660"></a><span class='hs-definition'>defIsRecord</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-661"></a> <a name="line-662"></a><a name="defIsDataOrRecord"></a><span class='hs-definition'>defIsDataOrRecord</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Defn</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-663"></a><span class='hs-definition'>defIsDataOrRecord</span> <span class='hs-conid'>Record</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-664"></a><span class='hs-definition'>defIsDataOrRecord</span> <span class='hs-conid'>Datatype</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-665"></a><span class='hs-definition'>defIsDataOrRecord</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-666"></a> <a name="line-667"></a><a name="Fields"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Fields</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Fields</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Name</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <a name="line-668"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-669"></a> <a name="line-670"></a><a name="Reduced"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Reduced</span> <span class='hs-varid'>no</span> <span class='hs-varid'>yes</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NoReduction</span> <span class='hs-varid'>no</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>YesReduction</span> <span class='hs-varid'>yes</span> <a name="line-671"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Functor</span><span class='hs-layout'>)</span> <a name="line-672"></a> <a name="line-673"></a><a name="IsReduced"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>IsReduced</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NotReduced</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Reduced</span> <span class='hs-layout'>(</span><span class='hs-conid'>Blocked</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-674"></a><a name="MaybeReduced"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>MaybeReduced</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MaybeRed</span> <a name="line-675"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>isReduced</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IsReduced</span> <a name="line-676"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>ignoreReduced</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <a name="line-677"></a> <span class='hs-layout'>}</span> <a name="line-678"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Functor</span><span class='hs-layout'>)</span> <a name="line-679"></a> <a name="line-680"></a><a name="MaybeReducedArgs"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>MaybeReducedArgs</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>MaybeReduced</span> <span class='hs-layout'>(</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>Term</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <a name="line-681"></a> <a name="line-682"></a><a name="notReduced"></a><span class='hs-definition'>notReduced</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>MaybeReduced</span> <span class='hs-varid'>a</span> <a name="line-683"></a><span class='hs-definition'>notReduced</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MaybeRed</span> <span class='hs-conid'>NotReduced</span> <span class='hs-varid'>x</span> <a name="line-684"></a> <a name="line-685"></a><a name="reduced"></a><span class='hs-definition'>reduced</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Blocked</span> <span class='hs-layout'>(</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>Term</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>MaybeReduced</span> <span class='hs-layout'>(</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>Term</span><span class='hs-layout'>)</span> <a name="line-686"></a><span class='hs-definition'>reduced</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>fmap</span> <span class='hs-varid'>ignoreSharing</span> <span class='hs-varop'><$></span> <span class='hs-varid'>b</span> <span class='hs-keyword'>of</span> <a name="line-687"></a> <span class='hs-conid'>NotBlocked</span> <span class='hs-layout'>(</span><span class='hs-conid'>Arg</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-layout'>(</span><span class='hs-conid'>MetaV</span> <span class='hs-varid'>x</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>MaybeRed</span> <span class='hs-layout'>(</span><span class='hs-conid'>Reduced</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Blocked</span> <span class='hs-varid'>x</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <span class='hs-varid'>v</span> <a name="line-688"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>MaybeRed</span> <span class='hs-layout'>(</span><span class='hs-conid'>Reduced</span> <span class='hs-varop'>$</span> <span class='hs-conid'>()</span> <span class='hs-varop'><$</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-varid'>v</span> <a name="line-689"></a> <span class='hs-keyword'>where</span> <a name="line-690"></a> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ignoreBlocking</span> <span class='hs-varid'>b</span> <a name="line-691"></a> <a name="line-692"></a><a name="PrimFun"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>PrimFun</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PrimFun</span> <a name="line-693"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>primFunName</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>QName</span> <a name="line-694"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>primFunArity</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Arity</span> <a name="line-695"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>primFunImplementation</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>Term</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Reduced</span> <span class='hs-conid'>MaybeReducedArgs</span> <span class='hs-conid'>Term</span><span class='hs-layout'>)</span> <a name="line-696"></a> <span class='hs-layout'>}</span> <a name="line-697"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-698"></a> <a name="line-699"></a><a name="defClauses"></a><span class='hs-definition'>defClauses</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Definition</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Clause</span><span class='hs-keyglyph'>]</span> <a name="line-700"></a><span class='hs-definition'>defClauses</span> <span class='hs-conid'>Defn</span><span class='hs-layout'>{</span><span class='hs-varid'>theDef</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Function</span><span class='hs-layout'>{</span><span class='hs-varid'>funClauses</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>cs</span><span class='hs-layout'>}</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>cs</span> <a name="line-701"></a><span class='hs-definition'>defClauses</span> <span class='hs-conid'>Defn</span><span class='hs-layout'>{</span><span class='hs-varid'>theDef</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Primitive</span><span class='hs-layout'>{</span><span class='hs-varid'>primClauses</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>cs</span><span class='hs-layout'>}</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>cs</span> <a name="line-702"></a><span class='hs-definition'>defClauses</span> <span class='hs-conid'>Defn</span><span class='hs-layout'>{</span><span class='hs-varid'>theDef</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Datatype</span><span class='hs-layout'>{</span><span class='hs-varid'>dataClause</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>c</span><span class='hs-layout'>}</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>c</span><span class='hs-keyglyph'>]</span> <a name="line-703"></a><span class='hs-definition'>defClauses</span> <span class='hs-conid'>Defn</span><span class='hs-layout'>{</span><span class='hs-varid'>theDef</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Record</span><span class='hs-layout'>{</span><span class='hs-varid'>recClause</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>c</span><span class='hs-layout'>}</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>c</span><span class='hs-keyglyph'>]</span> <a name="line-704"></a><span class='hs-definition'>defClauses</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span> <a name="line-705"></a> <a name="line-706"></a><a name="defCompiled"></a><span class='hs-definition'>defCompiled</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Definition</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>CompiledClauses</span> <a name="line-707"></a><span class='hs-definition'>defCompiled</span> <span class='hs-conid'>Defn</span><span class='hs-layout'>{</span><span class='hs-varid'>theDef</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Function</span><span class='hs-layout'>{</span><span class='hs-varid'>funCompiled</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>cc</span><span class='hs-layout'>}</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>cc</span> <a name="line-708"></a><span class='hs-definition'>defCompiled</span> <span class='hs-conid'>Defn</span><span class='hs-layout'>{</span><span class='hs-varid'>theDef</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Primitive</span><span class='hs-layout'>{</span><span class='hs-varid'>primCompiled</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mcc</span><span class='hs-layout'>}</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mcc</span> <a name="line-709"></a><span class='hs-definition'>defCompiled</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span> <a name="line-710"></a> <a name="line-711"></a><a name="defJSDef"></a><span class='hs-definition'>defJSDef</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Definition</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>JSCode</span> <a name="line-712"></a><span class='hs-definition'>defJSDef</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>compiledJS</span> <span class='hs-varop'>.</span> <span class='hs-varid'>defCompiledRep</span> <a name="line-713"></a> <a name="line-714"></a><a name="defEpicDef"></a><span class='hs-definition'>defEpicDef</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Definition</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>EpicCode</span> <a name="line-715"></a><span class='hs-definition'>defEpicDef</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>compiledEpic</span> <span class='hs-varop'>.</span> <span class='hs-varid'>defCompiledRep</span> <a name="line-716"></a> <a name="line-717"></a><a name="defDelayed"></a><span class='hs-comment'>-- | Are the clauses of this definition delayed?</span> <a name="line-718"></a><span class='hs-definition'>defDelayed</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Definition</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Delayed</span> <a name="line-719"></a><span class='hs-definition'>defDelayed</span> <span class='hs-conid'>Defn</span><span class='hs-layout'>{</span><span class='hs-varid'>theDef</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Function</span><span class='hs-layout'>{</span><span class='hs-varid'>funDelayed</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>d</span><span class='hs-layout'>}</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>d</span> <a name="line-720"></a><span class='hs-definition'>defDelayed</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NotDelayed</span> <a name="line-721"></a> <a name="line-722"></a><a name="defCopy"></a><span class='hs-comment'>-- | Is the definition just a copy created by a module instantiation?</span> <a name="line-723"></a><span class='hs-definition'>defCopy</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Definition</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-724"></a><span class='hs-definition'>defCopy</span> <span class='hs-conid'>Defn</span><span class='hs-layout'>{</span><span class='hs-varid'>theDef</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Function</span><span class='hs-layout'>{</span><span class='hs-varid'>funCopy</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>b</span><span class='hs-layout'>}</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>b</span> <a name="line-725"></a><span class='hs-definition'>defCopy</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-726"></a> <a name="line-727"></a><a name="defAbstract"></a><span class='hs-definition'>defAbstract</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Definition</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IsAbstract</span> <a name="line-728"></a><span class='hs-definition'>defAbstract</span> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>theDef</span> <span class='hs-varid'>d</span> <span class='hs-keyword'>of</span> <a name="line-729"></a> <span class='hs-conid'>Axiom</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>ConcreteDef</span> <a name="line-730"></a> <span class='hs-conid'>Function</span><span class='hs-layout'>{</span><span class='hs-varid'>funAbstr</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span> <a name="line-731"></a> <span class='hs-conid'>Datatype</span><span class='hs-layout'>{</span><span class='hs-varid'>dataAbstr</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span> <a name="line-732"></a> <span class='hs-conid'>Record</span><span class='hs-layout'>{</span><span class='hs-varid'>recAbstr</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span> <a name="line-733"></a> <span class='hs-conid'>Constructor</span><span class='hs-layout'>{</span><span class='hs-varid'>conAbstr</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span> <a name="line-734"></a> <span class='hs-conid'>Primitive</span><span class='hs-layout'>{</span><span class='hs-varid'>primAbstr</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span> <a name="line-735"></a> <a name="line-736"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-737"></a><span class='hs-comment'>-- ** Injectivity</span> <a name="line-738"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-739"></a> <a name="line-740"></a><a name="FunctionInverse"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>FunctionInverse</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>FunctionInverse'</span> <span class='hs-conid'>Clause</span> <a name="line-741"></a> <a name="line-742"></a><a name="FunctionInverse'"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>FunctionInverse'</span> <span class='hs-varid'>c</span> <a name="line-743"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NotInjective</span> <a name="line-744"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Inverse</span> <span class='hs-layout'>(</span><span class='hs-conid'>Map</span> <span class='hs-conid'>TermHead</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <a name="line-745"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Functor</span><span class='hs-layout'>)</span> <a name="line-746"></a> <a name="line-747"></a><a name="TermHead"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>TermHead</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SortHead</span> <a name="line-748"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PiHead</span> <a name="line-749"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConHead</span> <span class='hs-conid'>QName</span> <a name="line-750"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-751"></a> <a name="line-752"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-753"></a><span class='hs-comment'>-- ** Mutual blocks</span> <a name="line-754"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-755"></a> <a name="line-756"></a><a name="MutualId"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>MutualId</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MutId</span> <span class='hs-conid'>Int32</span> <a name="line-757"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Num</span><span class='hs-layout'>)</span> <a name="line-758"></a> <a name="line-759"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-760"></a><span class='hs-comment'>-- ** Statistics</span> <a name="line-761"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-762"></a> <a name="line-763"></a><a name="Statistics"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Statistics</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>String</span> <span class='hs-conid'>Integer</span> <a name="line-764"></a> <a name="line-765"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-766"></a><span class='hs-comment'>-- ** Trace</span> <a name="line-767"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-768"></a> <a name="line-769"></a><a name="Call"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Call</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CheckClause</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Clause</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Clause</span><span class='hs-layout'>)</span> <a name="line-770"></a> <span class='hs-keyglyph'>|</span> <span class='hs-keyword'>forall</span> <span class='hs-varid'>a</span><span class='hs-varop'>.</span> <span class='hs-conid'>CheckPattern</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Pattern</span> <span class='hs-conid'>Telescope</span> <span class='hs-conid'>Type</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <a name="line-771"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckLetBinding</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>LetBinding</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-772"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InferExpr</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>Term</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-773"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckExpr</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <span class='hs-conid'>Type</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Term</span><span class='hs-layout'>)</span> <a name="line-774"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckDotPattern</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <span class='hs-conid'>Term</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Constraints</span><span class='hs-layout'>)</span> <a name="line-775"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckPatternShadowing</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Clause</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-776"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IsTypeCall</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <span class='hs-conid'>Sort</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span> <a name="line-777"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IsType_</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span> <a name="line-778"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InferVar</span> <span class='hs-conid'>Name</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>Term</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-779"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InferDef</span> <span class='hs-conid'>Range</span> <span class='hs-conid'>QName</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>Term</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-780"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckArguments</span> <span class='hs-conid'>Range</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>NamedArg</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span><span class='hs-keyglyph'>]</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Type</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>Args</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-781"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckDataDef</span> <span class='hs-conid'>Range</span> <span class='hs-conid'>Name</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>LamBinding</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Constructor</span><span class='hs-keyglyph'>]</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-782"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckRecDef</span> <span class='hs-conid'>Range</span> <span class='hs-conid'>Name</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>LamBinding</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Constructor</span><span class='hs-keyglyph'>]</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-783"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckConstructor</span> <span class='hs-conid'>QName</span> <span class='hs-conid'>Telescope</span> <span class='hs-conid'>Sort</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Constructor</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-784"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckFunDef</span> <span class='hs-conid'>Range</span> <span class='hs-conid'>Name</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Clause</span><span class='hs-keyglyph'>]</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-785"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckPragma</span> <span class='hs-conid'>Range</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Pragma</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-786"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckPrimitive</span> <span class='hs-conid'>Range</span> <span class='hs-conid'>Name</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-787"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckIsEmpty</span> <span class='hs-conid'>Range</span> <span class='hs-conid'>Type</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-788"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckWithFunctionType</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-789"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CheckSectionApplication</span> <span class='hs-conid'>Range</span> <span class='hs-conid'>ModuleName</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>ModuleApplication</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-790"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ScopeCheckExpr</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span><span class='hs-layout'>)</span> <a name="line-791"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ScopeCheckDeclaration</span> <span class='hs-conid'>D</span><span class='hs-varop'>.</span><span class='hs-conid'>NiceDeclaration</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Declaration</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <a name="line-792"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ScopeCheckLHS</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Name</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Pattern</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>LHS</span><span class='hs-layout'>)</span> <a name="line-793"></a> <span class='hs-keyglyph'>|</span> <span class='hs-keyword'>forall</span> <span class='hs-varid'>a</span><span class='hs-varop'>.</span> <span class='hs-conid'>NoHighlighting</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <a name="line-794"></a> <span class='hs-keyglyph'>|</span> <span class='hs-keyword'>forall</span> <span class='hs-varid'>a</span><span class='hs-varop'>.</span> <span class='hs-conid'>SetRange</span> <span class='hs-conid'>Range</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ used by 'setCurrentRange'</span> <a name="line-795"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-796"></a> <a name="line-797"></a><a name="instance%20HasRange%20Call"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>HasRange</span> <span class='hs-conid'>Call</span> <span class='hs-keyword'>where</span> <a name="line-798"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckClause</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>c</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>c</span> <a name="line-799"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckPattern</span> <span class='hs-varid'>p</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>p</span> <a name="line-800"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>InferExpr</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>e</span> <a name="line-801"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckExpr</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>e</span> <a name="line-802"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckLetBinding</span> <span class='hs-varid'>b</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>b</span> <a name="line-803"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>IsTypeCall</span> <span class='hs-varid'>e</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>e</span> <a name="line-804"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>IsType_</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>e</span> <a name="line-805"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>InferVar</span> <span class='hs-varid'>x</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>x</span> <a name="line-806"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>InferDef</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>f</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>f</span> <a name="line-807"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckArguments</span> <span class='hs-varid'>r</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span> <a name="line-808"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckDataDef</span> <span class='hs-varid'>i</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>i</span> <a name="line-809"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckRecDef</span> <span class='hs-varid'>i</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>i</span> <a name="line-810"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckConstructor</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>c</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>c</span> <a name="line-811"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckFunDef</span> <span class='hs-varid'>i</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>i</span> <a name="line-812"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckPragma</span> <span class='hs-varid'>r</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span> <a name="line-813"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckPrimitive</span> <span class='hs-varid'>i</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>i</span> <a name="line-814"></a> <span class='hs-varid'>getRange</span> <span class='hs-conid'>CheckWithFunctionType</span><span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>noRange</span> <a name="line-815"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>ScopeCheckExpr</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>e</span> <a name="line-816"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>ScopeCheckDeclaration</span> <span class='hs-varid'>d</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>d</span> <a name="line-817"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>ScopeCheckLHS</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>p</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>p</span> <a name="line-818"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckDotPattern</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>e</span> <a name="line-819"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckPatternShadowing</span> <span class='hs-varid'>c</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getRange</span> <span class='hs-varid'>c</span> <a name="line-820"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>SetRange</span> <span class='hs-varid'>r</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span> <a name="line-821"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckSectionApplication</span> <span class='hs-varid'>r</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span> <a name="line-822"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>CheckIsEmpty</span> <span class='hs-varid'>r</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span> <a name="line-823"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>NoHighlighting</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>noRange</span> <a name="line-824"></a> <a name="line-825"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-826"></a><span class='hs-comment'>-- ** Builtin things</span> <a name="line-827"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-828"></a> <a name="line-829"></a><a name="BuiltinDescriptor"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>BuiltinDescriptor</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>BuiltinData</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCM</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span> <a name="line-830"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BuiltinDataCons</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCM</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span> <a name="line-831"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BuiltinPrim</span> <span class='hs-conid'>String</span> <span class='hs-layout'>(</span><span class='hs-conid'>Term</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCM</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-832"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BuiltinPostulate</span> <span class='hs-conid'>Relevance</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCM</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span> <a name="line-833"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BuiltinUnknown</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCM</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Term</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCM</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span> <a name="line-834"></a> <a name="line-835"></a><a name="BuiltinInfo"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>BuiltinInfo</span> <span class='hs-keyglyph'>=</span> <a name="line-836"></a> <span class='hs-conid'>BuiltinInfo</span> <span class='hs-layout'>{</span> <span class='hs-varid'>builtinName</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <a name="line-837"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>builtinDesc</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>BuiltinDescriptor</span> <span class='hs-layout'>}</span> <a name="line-838"></a> <a name="line-839"></a><a name="BuiltinThings"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>BuiltinThings</span> <span class='hs-varid'>pf</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>String</span> <span class='hs-layout'>(</span><span class='hs-conid'>Builtin</span> <span class='hs-varid'>pf</span><span class='hs-layout'>)</span> <a name="line-840"></a> <a name="line-841"></a><a name="Builtin"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Builtin</span> <span class='hs-varid'>pf</span> <a name="line-842"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Builtin</span> <span class='hs-conid'>Term</span> <a name="line-843"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Prim</span> <span class='hs-varid'>pf</span> <a name="line-844"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Functor</span><span class='hs-layout'>,</span> <span class='hs-conid'>Foldable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Traversable</span><span class='hs-layout'>)</span> <a name="line-845"></a> <a name="line-846"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-847"></a><span class='hs-comment'>-- * Highlighting levels</span> <a name="line-848"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-849"></a> <a name="line-850"></a><span class='hs-comment'>-- | How much highlighting should be sent to the user interface?</span> <a name="line-851"></a> <a name="line-852"></a><a name="HighlightingLevel"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>HighlightingLevel</span> <a name="line-853"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>None</span> <a name="line-854"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NonInteractive</span> <a name="line-855"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Interactive</span> <a name="line-856"></a> <span class='hs-comment'>-- ^ This includes both non-interactive highlighting and</span> <a name="line-857"></a> <span class='hs-comment'>-- interactive highlighting of the expression that is currently</span> <a name="line-858"></a> <span class='hs-comment'>-- being type-checked.</span> <a name="line-859"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Read</span><span class='hs-layout'>)</span> <a name="line-860"></a> <a name="line-861"></a><span class='hs-comment'>-- | How should highlighting be sent to the user interface?</span> <a name="line-862"></a> <a name="line-863"></a><a name="HighlightingMethod"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>HighlightingMethod</span> <a name="line-864"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Direct</span> <a name="line-865"></a> <span class='hs-comment'>-- ^ Via stdout.</span> <a name="line-866"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Indirect</span> <a name="line-867"></a> <span class='hs-comment'>-- ^ Both via files and via stdout.</span> <a name="line-868"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Read</span><span class='hs-layout'>)</span> <a name="line-869"></a> <a name="line-870"></a><span class='hs-comment'>-- | @ifTopLevelAndHighlightingLevelIs l m@ runs @m@ when we're</span> <a name="line-871"></a><span class='hs-comment'>-- type-checking the top-level module and the highlighting level is</span> <a name="line-872"></a><span class='hs-comment'>-- /at least/ @l@.</span> <a name="line-873"></a> <a name="line-874"></a><a name="ifTopLevelAndHighlightingLevelIs"></a><span class='hs-definition'>ifTopLevelAndHighlightingLevelIs</span> <span class='hs-keyglyph'>::</span> <a name="line-875"></a> <span class='hs-conid'>MonadTCM</span> <span class='hs-varid'>tcm</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>HighlightingLevel</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>tcm</span> <span class='hs-conid'>()</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>tcm</span> <span class='hs-conid'>()</span> <a name="line-876"></a><span class='hs-definition'>ifTopLevelAndHighlightingLevelIs</span> <span class='hs-varid'>l</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <a name="line-877"></a> <span class='hs-varid'>e</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>ask</span> <a name="line-878"></a> <span class='hs-varid'>when</span> <span class='hs-layout'>(</span><span class='hs-varid'>envModuleNestingLevel</span> <span class='hs-varid'>e</span> <span class='hs-varop'>==</span> <span class='hs-num'>0</span> <span class='hs-varop'>&&</span> <a name="line-879"></a> <span class='hs-varid'>envHighlightingLevel</span> <span class='hs-varid'>e</span> <span class='hs-varop'>>=</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span> <a name="line-880"></a> <span class='hs-varid'>m</span> <a name="line-881"></a> <a name="line-882"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-883"></a><span class='hs-comment'>-- * Type checking environment</span> <a name="line-884"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-885"></a> <a name="line-886"></a><a name="TCEnv"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>TCEnv</span> <span class='hs-keyglyph'>=</span> <a name="line-887"></a> <span class='hs-conid'>TCEnv</span> <span class='hs-layout'>{</span> <span class='hs-varid'>envContext</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Context</span> <a name="line-888"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envLetBindings</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>LetBindings</span> <a name="line-889"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envCurrentModule</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ModuleName</span> <a name="line-890"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envCurrentPath</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>AbsolutePath</span> <a name="line-891"></a> <span class='hs-comment'>-- ^ The path to the file that is currently being</span> <a name="line-892"></a> <span class='hs-comment'>-- type-checked.</span> <a name="line-893"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envAnonymousModules</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>ModuleName</span><span class='hs-layout'>,</span> <span class='hs-conid'>Nat</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ anonymous modules and their number of free variables</span> <a name="line-894"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envImportPath</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>TopLevelModuleName</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ to detect import cycles</span> <a name="line-895"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envMutualBlock</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>MutualId</span> <span class='hs-comment'>-- ^ the current (if any) mutual block</span> <a name="line-896"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envSolvingConstraints</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <a name="line-897"></a> <span class='hs-comment'>-- ^ Are we currently in the process of solving active constraints?</span> <a name="line-898"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envAssignMetas</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <a name="line-899"></a> <span class='hs-comment'>-- ^ Are we allowed to assign metas?</span> <a name="line-900"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envActiveProblems</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ProblemId</span><span class='hs-keyglyph'>]</span> <a name="line-901"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envAbstractMode</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>AbstractMode</span> <a name="line-902"></a> <span class='hs-comment'>-- ^ When checking the typesignature of a public definition</span> <a name="line-903"></a> <span class='hs-comment'>-- or the body of a non-abstract definition this is true.</span> <a name="line-904"></a> <span class='hs-comment'>-- To prevent information about abstract things leaking</span> <a name="line-905"></a> <span class='hs-comment'>-- outside the module.</span> <a name="line-906"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envRelevance</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Relevance</span> <a name="line-907"></a> <span class='hs-comment'>-- ^ Are we checking an irrelevant argument? (=@Irrelevant@)</span> <a name="line-908"></a> <span class='hs-comment'>-- Then top-level irrelevant declarations are enabled.</span> <a name="line-909"></a> <span class='hs-comment'>-- Other value: @Relevant@, then only relevant decls. are avail.</span> <a name="line-910"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envDisplayFormsEnabled</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <a name="line-911"></a> <span class='hs-comment'>-- ^ Sometimes we want to disable display forms.</span> <a name="line-912"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envReifyInteractionPoints</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <a name="line-913"></a> <span class='hs-comment'>-- ^ should we try to recover interaction points when reifying?</span> <a name="line-914"></a> <span class='hs-comment'>-- disabled when generating types for with functions</span> <a name="line-915"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envEtaContractImplicit</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <a name="line-916"></a> <span class='hs-comment'>-- ^ it's safe to eta contract implicit lambdas as long as we're</span> <a name="line-917"></a> <span class='hs-comment'>-- not going to reify and retypecheck (like when doing with</span> <a name="line-918"></a> <span class='hs-comment'>-- abstraction)</span> <a name="line-919"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envRange</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Range</span> <a name="line-920"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envHighlightingRange</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Range</span> <a name="line-921"></a> <span class='hs-comment'>-- ^ Interactive highlighting uses this range rather</span> <a name="line-922"></a> <span class='hs-comment'>-- than 'envRange'.</span> <a name="line-923"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envCall</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>Closure</span> <span class='hs-conid'>Call</span><span class='hs-layout'>)</span> <a name="line-924"></a> <span class='hs-comment'>-- ^ what we're doing at the moment</span> <a name="line-925"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envEmacs</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <a name="line-926"></a> <span class='hs-comment'>-- ^ True when called from the Emacs mode.</span> <a name="line-927"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envHighlightingLevel</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>HighlightingLevel</span> <a name="line-928"></a> <span class='hs-comment'>-- ^ Set to 'None' when imported modules are</span> <a name="line-929"></a> <span class='hs-comment'>-- type-checked.</span> <a name="line-930"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envHighlightingMethod</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>HighlightingMethod</span> <a name="line-931"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envModuleNestingLevel</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Integer</span> <a name="line-932"></a> <span class='hs-comment'>-- ^ This number indicates how far away from the</span> <a name="line-933"></a> <span class='hs-comment'>-- top-level module Agda has come when chasing</span> <a name="line-934"></a> <span class='hs-comment'>-- modules. The level of a given module is not</span> <a name="line-935"></a> <span class='hs-comment'>-- necessarily the same as the length, in the module</span> <a name="line-936"></a> <span class='hs-comment'>-- dependency graph, of the shortest path from the</span> <a name="line-937"></a> <span class='hs-comment'>-- top-level module; it depends on in which order</span> <a name="line-938"></a> <span class='hs-comment'>-- Agda chooses to chase dependencies.</span> <a name="line-939"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envAllowDestructiveUpdate</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <a name="line-940"></a> <span class='hs-comment'>-- ^ When True, allows destructively shared updating terms</span> <a name="line-941"></a> <span class='hs-comment'>-- during evaluation or unification. This is disabled when</span> <a name="line-942"></a> <span class='hs-comment'>-- doing speculative checking, like solve instance metas, or</span> <a name="line-943"></a> <span class='hs-comment'>-- when updating might break abstraction, as is the case when</span> <a name="line-944"></a> <span class='hs-comment'>-- checking abstract definitions.</span> <a name="line-945"></a> <span class='hs-layout'>}</span> <a name="line-946"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-947"></a> <a name="line-948"></a><a name="initEnv"></a><span class='hs-definition'>initEnv</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TCEnv</span> <a name="line-949"></a><span class='hs-definition'>initEnv</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCEnv</span> <span class='hs-layout'>{</span> <span class='hs-varid'>envContext</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span> <a name="line-950"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envLetBindings</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span> <a name="line-951"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envCurrentModule</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>noModuleName</span> <a name="line-952"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envCurrentPath</span> <span class='hs-keyglyph'>=</span> <span class='hs-sel'>__IMPOSSIBLE__</span> <a name="line-953"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envAnonymousModules</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span> <a name="line-954"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envImportPath</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span> <a name="line-955"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envMutualBlock</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span> <a name="line-956"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envSolvingConstraints</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-957"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envActiveProblems</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-num'>0</span><span class='hs-keyglyph'>]</span> <a name="line-958"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envAssignMetas</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-959"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envAbstractMode</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AbstractMode</span> <a name="line-960"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envRelevance</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Relevant</span> <a name="line-961"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envDisplayFormsEnabled</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-962"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envReifyInteractionPoints</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-963"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envEtaContractImplicit</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-964"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envRange</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>noRange</span> <a name="line-965"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envHighlightingRange</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>noRange</span> <a name="line-966"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envCall</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span> <a name="line-967"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envEmacs</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-968"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envHighlightingLevel</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>None</span> <a name="line-969"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envHighlightingMethod</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Indirect</span> <a name="line-970"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envModuleNestingLevel</span> <span class='hs-keyglyph'>=</span> <span class='hs-comment'>-</span><span class='hs-num'>1</span> <a name="line-971"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>envAllowDestructiveUpdate</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-972"></a> <span class='hs-layout'>}</span> <a name="line-973"></a> <a name="line-974"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-975"></a><span class='hs-comment'>-- ** Context</span> <a name="line-976"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-977"></a> <a name="line-978"></a><a name="Context"></a><span class='hs-comment'>-- | The @Context@ is a stack of 'ContextEntry's.</span> <a name="line-979"></a><a name="Context"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Context</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ContextEntry</span><span class='hs-keyglyph'>]</span> <a name="line-980"></a><a name="ContextEntry"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ContextEntry</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Ctx</span> <span class='hs-layout'>{</span> <span class='hs-varid'>ctxId</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CtxId</span> <a name="line-981"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>ctxEntry</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dom</span> <span class='hs-layout'>(</span><span class='hs-conid'>Name</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span> <a name="line-982"></a> <span class='hs-layout'>}</span> <a name="line-983"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-984"></a> <a name="line-985"></a><a name="CtxId"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>CtxId</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CtxId</span> <span class='hs-conid'>Nat</span> <a name="line-986"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Enum</span><span class='hs-layout'>,</span> <span class='hs-conid'>Real</span><span class='hs-layout'>,</span> <span class='hs-conid'>Integral</span><span class='hs-layout'>,</span> <span class='hs-conid'>Num</span><span class='hs-layout'>)</span> <a name="line-987"></a> <a name="line-988"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-989"></a><span class='hs-comment'>-- ** Let bindings</span> <a name="line-990"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-991"></a> <a name="line-992"></a><a name="LetBindings"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>LetBindings</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Map</span> <span class='hs-conid'>Name</span> <span class='hs-layout'>(</span><span class='hs-conid'>Open</span> <span class='hs-layout'>(</span><span class='hs-conid'>Term</span><span class='hs-layout'>,</span> <span class='hs-conid'>Dom</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-993"></a> <a name="line-994"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-995"></a><span class='hs-comment'>-- ** Abstract mode</span> <a name="line-996"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-997"></a> <a name="line-998"></a><a name="AbstractMode"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>AbstractMode</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AbstractMode</span> <span class='hs-comment'>-- ^ abstract things in the current module can be accessed</span> <a name="line-999"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConcreteMode</span> <span class='hs-comment'>-- ^ no abstract things can be accessed</span> <a name="line-1000"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IgnoreAbstractMode</span> <span class='hs-comment'>-- ^ all abstract things can be accessed</span> <a name="line-1001"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-1002"></a> <a name="line-1003"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-1004"></a><span class='hs-comment'>-- ** Insertion of implicit arguments</span> <a name="line-1005"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-1006"></a> <a name="line-1007"></a><a name="ExpandHidden"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ExpandHidden</span> <a name="line-1008"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ExpandLast</span> <span class='hs-comment'>-- ^ Add implicit arguments in the end until type is no longer hidden 'Pi'.</span> <a name="line-1009"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DontExpandLast</span> <span class='hs-comment'>-- ^ Do not append implicit arguments.</span> <a name="line-1010"></a> <a name="line-1011"></a><a name="ExpandInstances"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ExpandInstances</span> <a name="line-1012"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ExpandInstanceArguments</span> <a name="line-1013"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DontExpandInstanceArguments</span> <a name="line-1014"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>)</span> <a name="line-1015"></a> <a name="line-1016"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-1017"></a><span class='hs-comment'>-- * Type checking errors</span> <a name="line-1018"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-1019"></a> <a name="line-1020"></a><a name="Occ"></a><span class='hs-comment'>-- Occurence of a name in a datatype definition</span> <a name="line-1021"></a><a name="Occ"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Occ</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>OccCon</span> <span class='hs-layout'>{</span> <span class='hs-varid'>occDatatype</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>QName</span> <a name="line-1022"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>occConstructor</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>QName</span> <a name="line-1023"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>occPosition</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>OccPos</span> <a name="line-1024"></a> <span class='hs-layout'>}</span> <a name="line-1025"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OccClause</span> <span class='hs-layout'>{</span> <span class='hs-varid'>occFunction</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>QName</span> <a name="line-1026"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>occClause</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <a name="line-1027"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>occPosition</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>OccPos</span> <a name="line-1028"></a> <span class='hs-layout'>}</span> <a name="line-1029"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-1030"></a> <a name="line-1031"></a><a name="OccPos"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>OccPos</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NonPositively</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ArgumentTo</span> <span class='hs-conid'>Nat</span> <span class='hs-conid'>QName</span> <a name="line-1032"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-1033"></a> <a name="line-1034"></a><span class='hs-comment'>-- | Information about a call.</span> <a name="line-1035"></a> <a name="line-1036"></a><a name="CallInfo"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>CallInfo</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CallInfo</span> <a name="line-1037"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>callInfoRange</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Range</span> <a name="line-1038"></a> <span class='hs-comment'>-- ^ Range of the head identifier.</span> <a name="line-1039"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>callInfoCall</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <a name="line-1040"></a> <span class='hs-comment'>-- ^ Formatted representation of the call.</span> <a name="line-1041"></a> <span class='hs-comment'>--</span> <a name="line-1042"></a> <span class='hs-comment'>-- ('Doc' would perhaps be better here, but 'Doc' doesn't come</span> <a name="line-1043"></a> <span class='hs-comment'>-- with an 'Ord' instance.)</span> <a name="line-1044"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-1045"></a> <a name="line-1046"></a><span class='hs-comment'>-- | Information about a mutual block which did not pass the</span> <a name="line-1047"></a><span class='hs-comment'>-- termination checker.</span> <a name="line-1048"></a> <a name="line-1049"></a><a name="TerminationError"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>TerminationError</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TerminationError</span> <a name="line-1050"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>termErrFunctions</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>QName</span><span class='hs-keyglyph'>]</span> <a name="line-1051"></a> <span class='hs-comment'>-- ^ The functions which failed to check. (May not include</span> <a name="line-1052"></a> <span class='hs-comment'>-- automatically generated functions.)</span> <a name="line-1053"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>termErrCalls</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>CallInfo</span><span class='hs-keyglyph'>]</span> <a name="line-1054"></a> <span class='hs-comment'>-- ^ The problematic call sites.</span> <a name="line-1055"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span> <a name="line-1056"></a> <a name="line-1057"></a><span class='hs-comment'>{- <a name="line-1058"></a>-- | We consider two 'TerminationError's equal if they report the same <a name="line-1059"></a>-- invalid calls. <a name="line-1060"></a>instance Eq TerminationError where <a name="line-1061"></a> (==) = (==) `on` termErrCalls <a name="line-1062"></a>-}</span> <a name="line-1063"></a> <a name="line-1064"></a><a name="TypeError"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>TypeError</span> <a name="line-1065"></a> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>InternalError</span> <span class='hs-conid'>String</span> <a name="line-1066"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotImplemented</span> <span class='hs-conid'>String</span> <a name="line-1067"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotSupported</span> <span class='hs-conid'>String</span> <a name="line-1068"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompilationError</span> <span class='hs-conid'>String</span> <a name="line-1069"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TerminationCheckFailed</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>TerminationError</span><span class='hs-keyglyph'>]</span> <a name="line-1070"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PropMustBeSingleton</span> <a name="line-1071"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DataMustEndInSort</span> <span class='hs-conid'>Term</span> <a name="line-1072"></a><span class='hs-comment'>{- UNUSED <a name="line-1073"></a> | DataTooManyParameters <a name="line-1074"></a> -- ^ In @data D xs where@ the number of parameters @xs@ does not fit the <a name="line-1075"></a> -- the parameters given in the forward declaraion @data D Gamma : T@. <a name="line-1076"></a>-}</span> <a name="line-1077"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ShouldEndInApplicationOfTheDatatype</span> <span class='hs-conid'>Type</span> <a name="line-1078"></a> <span class='hs-comment'>-- ^ The target of a constructor isn't an application of its</span> <a name="line-1079"></a> <span class='hs-comment'>-- datatype. The 'Type' records what it does target.</span> <a name="line-1080"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ShouldBeAppliedToTheDatatypeParameters</span> <span class='hs-conid'>Term</span> <span class='hs-conid'>Term</span> <a name="line-1081"></a> <span class='hs-comment'>-- ^ The target of a constructor isn't its datatype applied to</span> <a name="line-1082"></a> <span class='hs-comment'>-- something that isn't the parameters. First term is the correct</span> <a name="line-1083"></a> <span class='hs-comment'>-- target and the second term is the actual target.</span> <a name="line-1084"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ShouldBeApplicationOf</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>QName</span> <a name="line-1085"></a> <span class='hs-comment'>-- ^ Expected a type to be an application of a particular datatype.</span> <a name="line-1086"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConstructorPatternInWrongDatatype</span> <span class='hs-conid'>QName</span> <span class='hs-conid'>QName</span> <span class='hs-comment'>-- ^ constructor, datatype</span> <a name="line-1087"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IndicesNotConstructorApplications</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>Term</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Indices.</span> <a name="line-1088"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IndexVariablesNotDistinct</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Nat</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>Term</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Variables, indices.</span> <a name="line-1089"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IndicesFreeInParameters</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Nat</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>Term</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>Term</span><span class='hs-keyglyph'>]</span> <a name="line-1090"></a> <span class='hs-comment'>-- ^ Indices (variables), index expressions (with</span> <a name="line-1091"></a> <span class='hs-comment'>-- constructors applied to reconstructed parameters),</span> <a name="line-1092"></a> <span class='hs-comment'>-- parameters.</span> <a name="line-1093"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DoesNotConstructAnElementOf</span> <span class='hs-conid'>QName</span> <span class='hs-conid'>Term</span> <span class='hs-comment'>-- ^ constructor, type</span> <a name="line-1094"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DifferentArities</span> <a name="line-1095"></a> <span class='hs-comment'>-- ^ Varying number of arguments for a function.</span> <a name="line-1096"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>WrongHidingInLHS</span> <span class='hs-conid'>Type</span> <a name="line-1097"></a> <span class='hs-comment'>-- ^ The left hand side of a function definition has a hidden argument</span> <a name="line-1098"></a> <span class='hs-comment'>-- where a non-hidden was expected.</span> <a name="line-1099"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>WrongHidingInLambda</span> <span class='hs-conid'>Type</span> <a name="line-1100"></a> <span class='hs-comment'>-- ^ Expected a non-hidden function and found a hidden lambda.</span> <a name="line-1101"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>WrongHidingInApplication</span> <span class='hs-conid'>Type</span> <a name="line-1102"></a> <span class='hs-comment'>-- ^ A function is applied to a hidden argument where a non-hidden was expected.</span> <a name="line-1103"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>WrongIrrelevanceInLambda</span> <span class='hs-conid'>Type</span> <a name="line-1104"></a> <span class='hs-comment'>-- ^ Expected a relevant function and found an irrelevant lambda.</span> <a name="line-1105"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotInductive</span> <span class='hs-conid'>Term</span> <a name="line-1106"></a> <span class='hs-comment'>-- ^ The term does not correspond to an inductive data type.</span> <a name="line-1107"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UninstantiatedDotPattern</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <a name="line-1108"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IlltypedPattern</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Pattern</span> <span class='hs-conid'>Type</span> <a name="line-1109"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TooManyArgumentsInLHS</span> <span class='hs-conid'>Type</span> <a name="line-1110"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>WrongNumberOfConstructorArguments</span> <span class='hs-conid'>QName</span> <span class='hs-conid'>Nat</span> <span class='hs-conid'>Nat</span> <a name="line-1111"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ShouldBeEmpty</span> <span class='hs-conid'>Type</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Pattern</span><span class='hs-keyglyph'>]</span> <a name="line-1112"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ShouldBeASort</span> <span class='hs-conid'>Type</span> <a name="line-1113"></a> <span class='hs-comment'>-- ^ The given type should have been a sort.</span> <a name="line-1114"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ShouldBePi</span> <span class='hs-conid'>Type</span> <a name="line-1115"></a> <span class='hs-comment'>-- ^ The given type should have been a pi.</span> <a name="line-1116"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ShouldBeRecordType</span> <span class='hs-conid'>Type</span> <a name="line-1117"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ShouldBeRecordPattern</span> <span class='hs-conid'>Pattern</span> <a name="line-1118"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotAProperTerm</span> <a name="line-1119"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SetOmegaNotValidType</span> <a name="line-1120"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SplitOnIrrelevant</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Pattern</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dom</span> <span class='hs-conid'>Type</span><span class='hs-layout'>)</span> <a name="line-1121"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DefinitionIsIrrelevant</span> <span class='hs-conid'>QName</span> <a name="line-1122"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>VariableIsIrrelevant</span> <span class='hs-conid'>Name</span> <a name="line-1123"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnequalLevel</span> <span class='hs-conid'>Comparison</span> <span class='hs-conid'>Term</span> <span class='hs-conid'>Term</span> <a name="line-1124"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnequalTerms</span> <span class='hs-conid'>Comparison</span> <span class='hs-conid'>Term</span> <span class='hs-conid'>Term</span> <span class='hs-conid'>Type</span> <a name="line-1125"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnequalTypes</span> <span class='hs-conid'>Comparison</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Type</span> <a name="line-1126"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnequalTelescopes</span> <span class='hs-conid'>Comparison</span> <span class='hs-conid'>Telescope</span> <span class='hs-conid'>Telescope</span> <a name="line-1127"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnequalRelevance</span> <span class='hs-conid'>Comparison</span> <span class='hs-conid'>Term</span> <span class='hs-conid'>Term</span> <a name="line-1128"></a> <span class='hs-comment'>-- ^ The two function types have different relevance.</span> <a name="line-1129"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnequalHiding</span> <span class='hs-conid'>Term</span> <span class='hs-conid'>Term</span> <a name="line-1130"></a> <span class='hs-comment'>-- ^ The two function types have different hiding.</span> <a name="line-1131"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnequalSorts</span> <span class='hs-conid'>Sort</span> <span class='hs-conid'>Sort</span> <a name="line-1132"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnequalBecauseOfUniverseConflict</span> <span class='hs-conid'>Comparison</span> <span class='hs-conid'>Term</span> <span class='hs-conid'>Term</span> <a name="line-1133"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HeterogeneousEquality</span> <span class='hs-conid'>Term</span> <span class='hs-conid'>Type</span> <span class='hs-conid'>Term</span> <span class='hs-conid'>Type</span> <a name="line-1134"></a> <span class='hs-comment'>-- ^ We ended up with an equality constraint where the terms</span> <a name="line-1135"></a> <span class='hs-comment'>-- have different types. This is not supported.</span> <a name="line-1136"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotLeqSort</span> <span class='hs-conid'>Sort</span> <span class='hs-conid'>Sort</span> <a name="line-1137"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>MetaCannotDependOn</span> <span class='hs-conid'>MetaId</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Nat</span><span class='hs-keyglyph'>]</span> <span class='hs-conid'>Nat</span> <a name="line-1138"></a> <span class='hs-comment'>-- ^ The arguments are the meta variable, the parameters it can</span> <a name="line-1139"></a> <span class='hs-comment'>-- depend on and the paratemeter that it wants to depend on.</span> <a name="line-1140"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>MetaOccursInItself</span> <span class='hs-conid'>MetaId</span> <a name="line-1141"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GenericError</span> <span class='hs-conid'>String</span> <a name="line-1142"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GenericDocError</span> <span class='hs-conid'>Doc</span> <a name="line-1143"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BuiltinMustBeConstructor</span> <span class='hs-conid'>String</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <a name="line-1144"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoSuchBuiltinName</span> <span class='hs-conid'>String</span> <a name="line-1145"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DuplicateBuiltinBinding</span> <span class='hs-conid'>String</span> <span class='hs-conid'>Term</span> <span class='hs-conid'>Term</span> <a name="line-1146"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoBindingForBuiltin</span> <span class='hs-conid'>String</span> <a name="line-1147"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoSuchPrimitiveFunction</span> <span class='hs-conid'>String</span> <a name="line-1148"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ShadowedModule</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Name</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>ModuleName</span><span class='hs-keyglyph'>]</span> <a name="line-1149"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BuiltinInParameterisedModule</span> <span class='hs-conid'>String</span> <a name="line-1150"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoRHSRequiresAbsurdPattern</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>NamedArg</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Pattern</span><span class='hs-keyglyph'>]</span> <a name="line-1151"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AbsurdPatternRequiresNoRHS</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>NamedArg</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Pattern</span><span class='hs-keyglyph'>]</span> <a name="line-1152"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TooFewFields</span> <span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Name</span><span class='hs-keyglyph'>]</span> <a name="line-1153"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TooManyFields</span> <span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Name</span><span class='hs-keyglyph'>]</span> <a name="line-1154"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DuplicateFields</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Name</span><span class='hs-keyglyph'>]</span> <a name="line-1155"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DuplicateConstructors</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Name</span><span class='hs-keyglyph'>]</span> <a name="line-1156"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnexpectedWithPatterns</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Pattern</span><span class='hs-keyglyph'>]</span> <a name="line-1157"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>WithClausePatternMismatch</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Pattern</span> <span class='hs-conid'>Pattern</span> <a name="line-1158"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FieldOutsideRecord</span> <a name="line-1159"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ModuleArityMismatch</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>ModuleName</span> <span class='hs-conid'>Telescope</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>NamedArg</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span><span class='hs-keyglyph'>]</span> <a name="line-1160"></a> <span class='hs-comment'>-- Coverage errors</span> <a name="line-1161"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IncompletePatternMatching</span> <span class='hs-conid'>Term</span> <span class='hs-conid'>Args</span> <span class='hs-comment'>-- can only happen if coverage checking is switched off</span> <a name="line-1162"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CoverageFailure</span> <span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-keyglyph'>[</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>Pattern</span><span class='hs-keyglyph'>]</span><span class='hs-keyglyph'>]</span> <a name="line-1163"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnreachableClauses</span> <span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-keyglyph'>[</span><span class='hs-conid'>Arg</span> <span class='hs-conid'>Pattern</span><span class='hs-keyglyph'>]</span><span class='hs-keyglyph'>]</span> <a name="line-1164"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CoverageCantSplitOn</span> <span class='hs-conid'>QName</span> <span class='hs-conid'>Telescope</span> <span class='hs-conid'>Args</span> <span class='hs-conid'>Args</span> <a name="line-1165"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CoverageCantSplitIrrelevantType</span> <span class='hs-conid'>Type</span> <a name="line-1166"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CoverageCantSplitType</span> <span class='hs-conid'>Type</span> <a name="line-1167"></a> <span class='hs-comment'>-- Positivity errors</span> <a name="line-1168"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotStrictlyPositive</span> <span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Occ</span><span class='hs-keyglyph'>]</span> <a name="line-1169"></a> <span class='hs-comment'>-- Import errors</span> <a name="line-1170"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LocalVsImportedModuleClash</span> <span class='hs-conid'>ModuleName</span> <a name="line-1171"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnsolvedMetas</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Range</span><span class='hs-keyglyph'>]</span> <a name="line-1172"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnsolvedConstraints</span> <span class='hs-conid'>Constraints</span> <a name="line-1173"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CyclicModuleDependency</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>TopLevelModuleName</span><span class='hs-keyglyph'>]</span> <a name="line-1174"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FileNotFound</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>TopLevelModuleName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AbsolutePath</span><span class='hs-keyglyph'>]</span> <a name="line-1175"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OverlappingProjects</span> <span class='hs-conid'>AbsolutePath</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>TopLevelModuleName</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>TopLevelModuleName</span> <a name="line-1176"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AmbiguousTopLevelModuleName</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>TopLevelModuleName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AbsolutePath</span><span class='hs-keyglyph'>]</span> <a name="line-1177"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ModuleNameDoesntMatchFileName</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>TopLevelModuleName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AbsolutePath</span><span class='hs-keyglyph'>]</span> <a name="line-1178"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ClashingFileNamesFor</span> <span class='hs-conid'>ModuleName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AbsolutePath</span><span class='hs-keyglyph'>]</span> <a name="line-1179"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ModuleDefinedInOtherFile</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>TopLevelModuleName</span> <span class='hs-conid'>AbsolutePath</span> <span class='hs-conid'>AbsolutePath</span> <a name="line-1180"></a> <span class='hs-comment'>-- ^ Module name, file from which it was loaded, file which</span> <a name="line-1181"></a> <span class='hs-comment'>-- the include path says contains the module.</span> <a name="line-1182"></a> <span class='hs-comment'>-- Scope errors</span> <a name="line-1183"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BothWithAndRHS</span> <a name="line-1184"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotInScope</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span><span class='hs-keyglyph'>]</span> <a name="line-1185"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoSuchModule</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span> <a name="line-1186"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AmbiguousName</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span><span class='hs-keyglyph'>]</span> <a name="line-1187"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AmbiguousModule</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>ModuleName</span><span class='hs-keyglyph'>]</span> <a name="line-1188"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UninstantiatedModule</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span> <a name="line-1189"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ClashingDefinition</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span> <a name="line-1190"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ClashingModule</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>ModuleName</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>ModuleName</span> <a name="line-1191"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ClashingImport</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Name</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span> <a name="line-1192"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ClashingModuleImport</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Name</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>ModuleName</span> <a name="line-1193"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PatternShadowsConstructor</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>Name</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span> <a name="line-1194"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ModuleDoesntExport</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>ImportedName</span><span class='hs-keyglyph'>]</span> <a name="line-1195"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DuplicateImports</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>ImportedName</span><span class='hs-keyglyph'>]</span> <a name="line-1196"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidPattern</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Pattern</span> <a name="line-1197"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>RepeatedVariablesInPattern</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Name</span><span class='hs-keyglyph'>]</span> <a name="line-1198"></a> <span class='hs-comment'>-- Concrete to Abstract errors</span> <a name="line-1199"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotAModuleExpr</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <a name="line-1200"></a> <span class='hs-comment'>-- ^ The expr was used in the right hand side of an implicit module</span> <a name="line-1201"></a> <span class='hs-comment'>-- definition, but it wasn't of the form @m Delta@.</span> <a name="line-1202"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotAnExpression</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <a name="line-1203"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotAValidLetBinding</span> <span class='hs-conid'>D</span><span class='hs-varop'>.</span><span class='hs-conid'>NiceDeclaration</span> <a name="line-1204"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NothingAppliedToHiddenArg</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <a name="line-1205"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NothingAppliedToInstanceArg</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span> <a name="line-1206"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnusedVariableInPatternSynonym</span> <a name="line-1207"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PatternSynonymArityMismatch</span> <span class='hs-conid'>A</span><span class='hs-varop'>.</span><span class='hs-conid'>QName</span> <a name="line-1208"></a> <span class='hs-comment'>-- Operator errors</span> <a name="line-1209"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoParseForApplication</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span><span class='hs-keyglyph'>]</span> <a name="line-1210"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AmbiguousParseForApplication</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Expr</span><span class='hs-keyglyph'>]</span> <a name="line-1211"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoParseForLHS</span> <span class='hs-conid'>LHSOrPatSyn</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Pattern</span> <a name="line-1212"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AmbiguousParseForLHS</span> <span class='hs-conid'>LHSOrPatSyn</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Pattern</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Pattern</span><span class='hs-keyglyph'>]</span> <a name="line-1213"></a><span class='hs-comment'>{- UNUSED <a name="line-1214"></a> | NoParseForPatternSynonym C.Pattern <a name="line-1215"></a> | AmbiguousParseForPatternSynonym C.Pattern [C.Pattern] <a name="line-1216"></a>-}</span> <a name="line-1217"></a> <span class='hs-comment'>-- Usage errors</span> <a name="line-1218"></a> <span class='hs-comment'>-- Implicit From Scope errors</span> <a name="line-1219"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IFSNoCandidateInScope</span> <span class='hs-conid'>Type</span> <a name="line-1220"></a> <span class='hs-comment'>-- Safe flag errors</span> <a name="line-1221"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SafeFlagPostulate</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Name</span> <a name="line-1222"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SafeFlagPragma</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span> <a name="line-1223"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SafeFlagNoTerminationCheck</span> <a name="line-1224"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SafeFlagPrimTrustMe</span> <a name="line-1225"></a> <span class='hs-comment'>-- Language option errors</span> <a name="line-1226"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NeedOptionCopatterns</span> <a name="line-1227"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-1228"></a> <a name="line-1229"></a><a name="LHSOrPatSyn"></a><span class='hs-comment'>-- | Distinguish error message when parsing lhs or pattern synonym, resp.</span> <a name="line-1230"></a><a name="LHSOrPatSyn"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>LHSOrPatSyn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IsLHS</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IsPatSyn</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Show</span><span class='hs-layout'>)</span> <a name="line-1231"></a> <a name="line-1232"></a><span class='hs-comment'>-- instance Show TypeError where</span> <a name="line-1233"></a><span class='hs-comment'>-- show _ = "<TypeError>" -- TODO: more info?</span> <a name="line-1234"></a> <a name="line-1235"></a><a name="instance%20Error%20TypeError"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Error</span> <span class='hs-conid'>TypeError</span> <span class='hs-keyword'>where</span> <a name="line-1236"></a> <span class='hs-varid'>noMsg</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>strMsg</span> <span class='hs-str'>""</span> <a name="line-1237"></a> <span class='hs-varid'>strMsg</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>GenericError</span> <a name="line-1238"></a> <a name="line-1239"></a><span class='hs-comment'>-- | Type-checking errors.</span> <a name="line-1240"></a> <a name="line-1241"></a><a name="TCErr"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>TCErr</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TypeError</span> <span class='hs-conid'>TCState</span> <span class='hs-layout'>(</span><span class='hs-conid'>Closure</span> <span class='hs-conid'>TypeError</span><span class='hs-layout'>)</span> <a name="line-1242"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Exception</span> <span class='hs-conid'>Range</span> <span class='hs-conid'>String</span> <a name="line-1243"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IOException</span> <span class='hs-conid'>Range</span> <span class='hs-conid'>E</span><span class='hs-varop'>.</span><span class='hs-conid'>IOException</span> <a name="line-1244"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PatternErr</span> <span class='hs-conid'>TCState</span> <span class='hs-comment'>-- ^ for pattern violations</span> <a name="line-1245"></a> <span class='hs-comment'>{- AbortAssign TCState -- ^ used to abort assignment to meta when there are instantiations -- UNUSED -}</span> <a name="line-1246"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span> <a name="line-1247"></a> <a name="line-1248"></a><a name="instance%20Error%20TCErr"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Error</span> <span class='hs-conid'>TCErr</span> <span class='hs-keyword'>where</span> <a name="line-1249"></a> <span class='hs-varid'>noMsg</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>strMsg</span> <span class='hs-str'>""</span> <a name="line-1250"></a> <span class='hs-varid'>strMsg</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>noRange</span> <span class='hs-varop'>.</span> <span class='hs-varid'>strMsg</span> <a name="line-1251"></a> <a name="line-1252"></a><a name="instance%20Show%20TCErr"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-conid'>TCErr</span> <span class='hs-keyword'>where</span> <a name="line-1253"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>TypeError</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-varid'>envRange</span> <span class='hs-varop'>$</span> <span class='hs-varid'>clEnv</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varop'>++</span> <span class='hs-str'>": "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-varid'>clValue</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <a name="line-1254"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exception</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-varid'>r</span> <span class='hs-varop'>++</span> <span class='hs-str'>": "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>s</span> <a name="line-1255"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>IOException</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-varid'>r</span> <span class='hs-varop'>++</span> <span class='hs-str'>": "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>e</span> <a name="line-1256"></a> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-conid'>PatternErr</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"Pattern violation (you shouldn't see this)"</span> <a name="line-1257"></a> <span class='hs-comment'>{- show (AbortAssign _) = "Abort assignment (you shouldn't see this)" -- UNUSED -}</span> <a name="line-1258"></a> <a name="line-1259"></a><a name="instance%20HasRange%20TCErr"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>HasRange</span> <span class='hs-conid'>TCErr</span> <span class='hs-keyword'>where</span> <a name="line-1260"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>TypeError</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>cl</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>envRange</span> <span class='hs-varop'>$</span> <span class='hs-varid'>clEnv</span> <span class='hs-varid'>cl</span> <a name="line-1261"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exception</span> <span class='hs-varid'>r</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span> <a name="line-1262"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>IOException</span> <span class='hs-varid'>r</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>r</span> <a name="line-1263"></a> <span class='hs-varid'>getRange</span> <span class='hs-layout'>(</span><span class='hs-conid'>PatternErr</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>noRange</span> <a name="line-1264"></a> <span class='hs-comment'>{- getRange (AbortAssign s) = noRange -- UNUSED -}</span> <a name="line-1265"></a> <a name="line-1266"></a><a name="instance%20MonadReader%20TCEnv%20(TCMT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Exception</span> <span class='hs-conid'>TCErr</span> <a name="line-1267"></a> <a name="line-1268"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-1269"></a><span class='hs-comment'>-- * Type checking monad transformer</span> <a name="line-1270"></a><span class='hs-comment'>---------------------------------------------------------------------------</span> <a name="line-1271"></a> <a name="line-1272"></a><a name="TCMT"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCM</span> <span class='hs-layout'>{</span> <span class='hs-varid'>unTCM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IORef</span> <span class='hs-conid'>TCState</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCEnv</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-layout'>}</span> <a name="line-1273"></a> <a name="line-1274"></a><a name="instance%20MonadReader%20TCEnv%20(TCMT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadReader</span> <span class='hs-conid'>TCEnv</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-1275"></a> <span class='hs-varid'>ask</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-varid'>e</span> <a name="line-1276"></a> <span class='hs-varid'>local</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCM</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>s</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <a name="line-1277"></a> <a name="line-1278"></a><a name="instance%20MonadState%20TCState%20(TCMT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadState</span> <span class='hs-conid'>TCState</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-1279"></a> <span class='hs-varid'>get</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>liftIO</span> <span class='hs-layout'>(</span><span class='hs-varid'>readIORef</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <a name="line-1280"></a> <span class='hs-varid'>put</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>liftIO</span> <span class='hs-layout'>(</span><span class='hs-varid'>writeIORef</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <a name="line-1281"></a> <a name="line-1282"></a><a name="TCM"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>TCM</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCMT</span> <span class='hs-conid'>IO</span> <a name="line-1283"></a> <a name="line-1284"></a><a name="MonadTCM"></a><span class='hs-keyword'>class</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Applicative</span> <span class='hs-varid'>tcm</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>tcm</span> <a name="line-1285"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>MonadReader</span> <span class='hs-conid'>TCEnv</span> <span class='hs-varid'>tcm</span> <a name="line-1286"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>MonadState</span> <span class='hs-conid'>TCState</span> <span class='hs-varid'>tcm</span> <a name="line-1287"></a> <span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadTCM</span> <span class='hs-varid'>tcm</span> <span class='hs-keyword'>where</span> <a name="line-1288"></a> <span class='hs-varid'>liftTCM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TCM</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>tcm</span> <span class='hs-varid'>a</span> <a name="line-1289"></a> <a name="line-1290"></a><a name="instance%20MonadError%20TCErr%20(TCMT%20IO)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadError</span> <span class='hs-conid'>TCErr</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCMT</span> <span class='hs-conid'>IO</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-1291"></a> <span class='hs-varid'>throwError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>liftIO</span> <span class='hs-varop'>.</span> <span class='hs-varid'>throwIO</span> <a name="line-1292"></a> <span class='hs-varid'>catchError</span> <span class='hs-varid'>m</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span> <a name="line-1293"></a> <span class='hs-varid'>oldState</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>liftIO</span> <span class='hs-layout'>(</span><span class='hs-varid'>readIORef</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <a name="line-1294"></a> <span class='hs-varid'>unTCM</span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <span class='hs-varop'>`</span><span class='hs-conid'>E</span><span class='hs-varop'>.</span><span class='hs-varid'>catch</span><span class='hs-varop'>`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>err</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span> <a name="line-1295"></a> <span class='hs-comment'>-- Reset the state, but do not forget changes to the persistent</span> <a name="line-1296"></a> <span class='hs-comment'>-- component.</span> <a name="line-1297"></a> <span class='hs-varid'>liftIO</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span> <a name="line-1298"></a> <span class='hs-varid'>newState</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>readIORef</span> <span class='hs-varid'>r</span> <a name="line-1299"></a> <span class='hs-varid'>writeIORef</span> <span class='hs-varid'>r</span> <span class='hs-varop'>$</span> <span class='hs-varid'>oldState</span> <span class='hs-layout'>{</span> <span class='hs-varid'>stPersistent</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>stPersistent</span> <span class='hs-varid'>newState</span> <span class='hs-layout'>}</span> <a name="line-1300"></a> <span class='hs-varid'>unTCM</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>err</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <a name="line-1301"></a> <a name="line-1302"></a><a name="catchError_"></a><span class='hs-comment'>-- | Preserve the state of the failing computation.</span> <a name="line-1303"></a><span class='hs-definition'>catchError_</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TCM</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>TCErr</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCM</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCM</span> <span class='hs-varid'>a</span> <a name="line-1304"></a><span class='hs-definition'>catchError_</span> <span class='hs-varid'>m</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <a name="line-1305"></a> <span class='hs-varid'>unTCM</span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <a name="line-1306"></a> <span class='hs-varop'>`</span><span class='hs-conid'>E</span><span class='hs-varop'>.</span><span class='hs-varid'>catch</span><span class='hs-varop'>`</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>err</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>unTCM</span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span> <span class='hs-varid'>err</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <a name="line-1307"></a> <a name="line-1308"></a><a name="mapTCMT"></a><span class='hs-comment'>{-# SPECIALIZE INLINE mapTCMT :: (forall a. IO a -> IO a) -> TCM a -> TCM a #-}</span> <a name="line-1309"></a><span class='hs-definition'>mapTCMT</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-keyword'>forall</span> <span class='hs-varid'>a</span><span class='hs-varop'>.</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>n</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>n</span> <span class='hs-varid'>a</span> <a name="line-1310"></a><span class='hs-definition'>mapTCMT</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCM</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-varid'>s</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <a name="line-1311"></a> <a name="line-1312"></a><a name="pureTCM"></a><span class='hs-definition'>pureTCM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-layout'>(</span><span class='hs-conid'>TCState</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCEnv</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <a name="line-1313"></a><span class='hs-definition'>pureTCM</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>do</span> <a name="line-1314"></a> <span class='hs-varid'>s</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>liftIO</span> <span class='hs-varop'>$</span> <span class='hs-varid'>readIORef</span> <span class='hs-varid'>r</span> <a name="line-1315"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>s</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <a name="line-1316"></a> <a name="line-1317"></a><a name="instance%20MonadTCM%20(TCMT%20m)"></a><span class='hs-comment'>{-# RULES "liftTCM/id" liftTCM = id #-}</span> <a name="line-1318"></a><a name="instance%20MonadTCM%20(TCMT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadTCM</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-1319"></a> <span class='hs-varid'>liftTCM</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapTCMT</span> <span class='hs-varid'>liftIO</span> <a name="line-1320"></a> <a name="line-1321"></a><a name="instance%20MonadTCM%20(ErrorT%20err%20tcm)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>Error</span> <span class='hs-varid'>err</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadTCM</span> <span class='hs-varid'>tcm</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadTCM</span> <span class='hs-layout'>(</span><span class='hs-conid'>ErrorT</span> <span class='hs-varid'>err</span> <span class='hs-varid'>tcm</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-1322"></a> <span class='hs-varid'>liftTCM</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lift</span> <span class='hs-varop'>.</span> <span class='hs-varid'>liftTCM</span> <a name="line-1323"></a> <a name="line-1324"></a><a name="instance%20MonadTrans%20TCMT"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadTrans</span> <span class='hs-conid'>TCMT</span> <span class='hs-keyword'>where</span> <a name="line-1325"></a> <span class='hs-varid'>lift</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <a name="line-1326"></a> <a name="line-1327"></a><a name="instance%20Monad%20(TCMT%20m)"></a><span class='hs-comment'>-- We want a special monad implementation of fail.</span> <a name="line-1328"></a><a name="instance%20Monad%20(TCMT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-1329"></a> <span class='hs-varid'>return</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>returnTCMT</span> <a name="line-1330"></a> <span class='hs-layout'>(</span><span class='hs-varop'>>>=</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bindTCMT</span> <a name="line-1331"></a> <span class='hs-layout'>(</span><span class='hs-varop'>>></span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>thenTCMT</span> <a name="line-1332"></a> <span class='hs-varid'>fail</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>internalError</span> <a name="line-1333"></a> <a name="line-1334"></a><span class='hs-comment'>-- One goal of the definitions and pragmas below is to inline the</span> <a name="line-1335"></a><span class='hs-comment'>-- monad operations as much as possible. This doesn't seem to have a</span> <a name="line-1336"></a><span class='hs-comment'>-- large effect on the performance of the normal executable, but (at</span> <a name="line-1337"></a><span class='hs-comment'>-- least on one machine/configuration) it has a massive effect on the</span> <a name="line-1338"></a><span class='hs-comment'>-- performance of the profiling executable [1], and reduces the time</span> <a name="line-1339"></a><span class='hs-comment'>-- attributed to bind from over 90% to about 25%.</span> <a name="line-1340"></a><span class='hs-comment'>--</span> <a name="line-1341"></a><span class='hs-comment'>-- [1] When compiled with -auto-all and run with -p: roughly 750%</span> <a name="line-1342"></a><span class='hs-comment'>-- faster for one example.</span> <a name="line-1343"></a> <a name="line-1344"></a><a name="returnTCMT"></a><span class='hs-definition'>returnTCMT</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <a name="line-1345"></a><span class='hs-definition'>returnTCMT</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>x</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>return</span> <span class='hs-varid'>x</span> <a name="line-1346"></a><span class='hs-comment'>{-# RULES "returnTCMT" <a name="line-1347"></a> returnTCMT = \x -> TCM $ \_ _ -> return x <a name="line-1348"></a> #-}</span> <a name="line-1349"></a><span class='hs-comment'>{-# INLINE returnTCMT #-}</span> <a name="line-1350"></a><span class='hs-comment'>{-# SPECIALIZE INLINE returnTCMT :: a -> TCM a #-}</span> <a name="line-1351"></a> <a name="line-1352"></a><a name="bindTCMT"></a><span class='hs-definition'>bindTCMT</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <a name="line-1353"></a><span class='hs-definition'>bindTCMT</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>TCM</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>k</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <span class='hs-varop'>>>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>x</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>unTCM</span> <span class='hs-layout'>(</span><span class='hs-varid'>k</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <a name="line-1354"></a><span class='hs-comment'>{-# RULES "bindTCMT" <a name="line-1355"></a> bindTCMT = \(TCM m) k -> TCM $ \r e -> <a name="line-1356"></a> m r e >>= \x -> unTCM (k x) r e <a name="line-1357"></a> #-}</span> <a name="line-1358"></a><span class='hs-comment'>{-# INLINE bindTCMT #-}</span> <a name="line-1359"></a><span class='hs-comment'>{-# SPECIALIZE INLINE bindTCMT :: TCM a -> (a -> TCM b) -> TCM b #-}</span> <a name="line-1360"></a> <a name="line-1361"></a><a name="thenTCMT"></a><span class='hs-definition'>thenTCMT</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <a name="line-1362"></a><span class='hs-definition'>thenTCMT</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>TCM</span> <span class='hs-varid'>m1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCM</span> <span class='hs-varid'>m2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m1</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <span class='hs-varop'>>></span> <span class='hs-varid'>m2</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <a name="line-1363"></a><span class='hs-comment'>{-# RULES "thenTCMT" <a name="line-1364"></a> thenTCMT = \(TCM m1) (TCM m2) -> TCM $ \r e -> m1 r e >> m2 r e <a name="line-1365"></a> #-}</span> <a name="line-1366"></a><span class='hs-comment'>{-# INLINE thenTCMT #-}</span> <a name="line-1367"></a><span class='hs-comment'>{-# SPECIALIZE INLINE thenTCMT :: TCM a -> TCM b -> TCM b #-}</span> <a name="line-1368"></a> <a name="line-1369"></a><a name="instance%20Functor%20(TCMT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Functor</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-1370"></a> <span class='hs-varid'>fmap</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmapTCMT</span> <a name="line-1371"></a> <a name="line-1372"></a><a name="fmapTCMT"></a><span class='hs-definition'>fmapTCMT</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <a name="line-1373"></a><span class='hs-definition'>fmapTCMT</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCM</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>liftM</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <a name="line-1374"></a><span class='hs-comment'>{-# RULES "fmapTCMT" <a name="line-1375"></a> fmapTCMT = \f (TCM m) -> TCM $ \r e -> liftM f (m r e) <a name="line-1376"></a> #-}</span> <a name="line-1377"></a><span class='hs-comment'>{-# INLINE fmapTCMT #-}</span> <a name="line-1378"></a><span class='hs-comment'>{-# SPECIALIZE INLINE fmapTCMT :: (a -> b) -> TCM a -> TCM b #-}</span> <a name="line-1379"></a> <a name="line-1380"></a><a name="instance%20Applicative%20(TCMT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Applicative</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-1381"></a> <span class='hs-varid'>pure</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>returnTCMT</span> <a name="line-1382"></a> <span class='hs-layout'>(</span><span class='hs-varop'><*></span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>apTCMT</span> <a name="line-1383"></a> <a name="line-1384"></a><a name="apTCMT"></a><span class='hs-definition'>apTCMT</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>b</span> <a name="line-1385"></a><span class='hs-definition'>apTCMT</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>TCM</span> <span class='hs-varid'>mf</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCM</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>ap</span> <span class='hs-layout'>(</span><span class='hs-varid'>mf</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <a name="line-1386"></a><span class='hs-comment'>{-# RULES "apTCMT" <a name="line-1387"></a> apTCMT = \(TCM mf) (TCM m) -> TCM $ \r e -> ap (mf r e) (m r e) <a name="line-1388"></a> #-}</span> <a name="line-1389"></a><span class='hs-comment'>{-# INLINE apTCMT #-}</span> <a name="line-1390"></a><span class='hs-comment'>{-# SPECIALIZE INLINE apTCMT :: TCM (a -> b) -> TCM a -> TCM b #-}</span> <a name="line-1391"></a> <a name="line-1392"></a><a name="instance%20MonadIO%20(TCMT%20m)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>MonadIO</span> <span class='hs-layout'>(</span><span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-1393"></a> <span class='hs-varid'>liftIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>TCM</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <a name="line-1394"></a> <span class='hs-keyword'>do</span> <span class='hs-keyword'>let</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>envRange</span> <span class='hs-varid'>e</span> <a name="line-1395"></a> <span class='hs-varid'>liftIO</span> <span class='hs-varop'>$</span> <span class='hs-varid'>wrap</span> <span class='hs-varid'>r</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span> <a name="line-1396"></a> <span class='hs-varid'>x</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>m</span> <a name="line-1397"></a> <span class='hs-varid'>x</span> <span class='hs-varop'>`seq`</span> <span class='hs-varid'>return</span> <span class='hs-varid'>x</span> <a name="line-1398"></a> <span class='hs-keyword'>where</span> <a name="line-1399"></a> <span class='hs-varid'>wrap</span> <span class='hs-varid'>r</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>failOnException</span> <span class='hs-varid'>handleException</span> <a name="line-1400"></a> <span class='hs-varop'>$</span> <span class='hs-conid'>E</span><span class='hs-varop'>.</span><span class='hs-varid'>catch</span> <span class='hs-varid'>m</span> <span class='hs-layout'>(</span><span class='hs-varid'>handleIOException</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <a name="line-1401"></a> <a name="line-1402"></a> <span class='hs-varid'>handleIOException</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>throwIO</span> <span class='hs-varop'>$</span> <span class='hs-conid'>IOException</span> <span class='hs-varid'>r</span> <span class='hs-varid'>e</span> <a name="line-1403"></a> <span class='hs-varid'>handleException</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>throwIO</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <a name="line-1404"></a> <a name="line-1405"></a><a name="patternViolation"></a><span class='hs-definition'>patternViolation</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TCM</span> <span class='hs-varid'>a</span> <a name="line-1406"></a><span class='hs-definition'>patternViolation</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <a name="line-1407"></a> <span class='hs-varid'>s</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>get</span> <a name="line-1408"></a> <span class='hs-varid'>throwError</span> <span class='hs-varop'>$</span> <span class='hs-conid'>PatternErr</span> <span class='hs-varid'>s</span> <a name="line-1409"></a> <a name="line-1410"></a><a name="internalError"></a><span class='hs-definition'>internalError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadTCM</span> <span class='hs-varid'>tcm</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>tcm</span> <span class='hs-varid'>a</span> <a name="line-1411"></a><span class='hs-definition'>internalError</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>typeError</span> <span class='hs-varop'>$</span> <span class='hs-conid'>InternalError</span> <span class='hs-varid'>s</span> <a name="line-1412"></a> <a name="line-1413"></a><a name="typeError"></a><span class='hs-definition'>typeError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadTCM</span> <span class='hs-varid'>tcm</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>TypeError</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>tcm</span> <span class='hs-varid'>a</span> <a name="line-1414"></a><span class='hs-definition'>typeError</span> <span class='hs-varid'>err</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>liftTCM</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span> <a name="line-1415"></a> <span class='hs-varid'>cl</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>buildClosure</span> <span class='hs-varid'>err</span> <a name="line-1416"></a> <span class='hs-varid'>s</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>get</span> <a name="line-1417"></a> <span class='hs-varid'>throwError</span> <span class='hs-varop'>$</span> <span class='hs-conid'>TypeError</span> <span class='hs-varid'>s</span> <span class='hs-varid'>cl</span> <a name="line-1418"></a> <a name="line-1419"></a><a name="runTCM"></a><span class='hs-comment'>-- | Running the type checking monad</span> <a name="line-1420"></a><span class='hs-definition'>runTCM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TCMT</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>TCErr</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <a name="line-1421"></a><span class='hs-definition'>runTCM</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varop'><$></span> <span class='hs-varid'>runTCM'</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varop'>`</span><span class='hs-conid'>E</span><span class='hs-varop'>.</span><span class='hs-varid'>catch</span><span class='hs-varop'>`</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span><span class='hs-layout'>)</span> <a name="line-1422"></a> <a name="line-1423"></a><a name="runTCM'"></a><span class='hs-definition'>runTCM'</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>TCMT</span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span> <a name="line-1424"></a><span class='hs-definition'>runTCM'</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <a name="line-1425"></a> <span class='hs-varid'>r</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>liftIO</span> <span class='hs-varop'>$</span> <span class='hs-varid'>newIORef</span> <span class='hs-varid'>initState</span> <a name="line-1426"></a> <span class='hs-varid'>unTCM</span> <span class='hs-varid'>m</span> <span class='hs-varid'>r</span> <span class='hs-varid'>initEnv</span> <a name="line-1427"></a> <a name="line-1428"></a><span class='hs-comment'>-- | Runs the given computation in a separate thread, with /a copy/ of</span> <a name="line-1429"></a><span class='hs-comment'>-- the current state and environment.</span> <a name="line-1430"></a><span class='hs-comment'>--</span> <a name="line-1431"></a><span class='hs-comment'>-- Note that Agda sometimes uses actual, mutable state. If the</span> <a name="line-1432"></a><span class='hs-comment'>-- computation given to @forkTCM@ tries to /modify/ this state, then</span> <a name="line-1433"></a><span class='hs-comment'>-- bad things can happen, because accesses are not mutually exclusive.</span> <a name="line-1434"></a><span class='hs-comment'>-- The @forkTCM@ function has been added mainly to allow the thread to</span> <a name="line-1435"></a><span class='hs-comment'>-- /read/ (a snapshot of) the current state in a convenient way.</span> <a name="line-1436"></a><span class='hs-comment'>--</span> <a name="line-1437"></a><span class='hs-comment'>-- Note also that exceptions which are raised in the thread are not</span> <a name="line-1438"></a><span class='hs-comment'>-- propagated to the parent, so the thread should not do anything</span> <a name="line-1439"></a><span class='hs-comment'>-- important.</span> <a name="line-1440"></a> <a name="line-1441"></a><a name="forkTCM"></a><span class='hs-definition'>forkTCM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TCM</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>TCM</span> <span class='hs-conid'>()</span> <a name="line-1442"></a><span class='hs-definition'>forkTCM</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <a name="line-1443"></a> <span class='hs-varid'>s</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>get</span> <a name="line-1444"></a> <span class='hs-varid'>e</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>ask</span> <a name="line-1445"></a> <span class='hs-varid'>liftIO</span> <span class='hs-varop'>$</span> <span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-varid'>forkIO</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span> <a name="line-1446"></a> <span class='hs-varid'>runTCM</span> <span class='hs-varop'>$</span> <span class='hs-varid'>local</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span> <a name="line-1447"></a> <span class='hs-varid'>put</span> <span class='hs-varid'>s</span> <a name="line-1448"></a> <span class='hs-varid'>m</span> <a name="line-1449"></a> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span> <a name="line-1450"></a> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span> <a name="line-1451"></a> <a name="line-1452"></a> <a name="line-1453"></a> <a name="line-1454"></a><a name="extendlambdaname"></a><span class='hs-comment'>-- | Base name for extended lambda patterns</span> <a name="line-1455"></a><span class='hs-definition'>extendlambdaname</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>".extendedlambda"</span> </pre></body> </html>