<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>InstEnv</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[ window.onload = function () {pageLoad();setSynopsis("mini_InstEnv.html");}; //]]> </script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ghc-7.4.2: The GHC API</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">InstEnv</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">type</span> <a href="#t:DFunId">DFunId</a> = <a href="Var.html#t:Id">Id</a></li><li class="src short"><span class="keyword">data</span> <a href="#t:OverlapFlag">OverlapFlag</a> <ul class="subs"><li>= <a href="#v:NoOverlap">NoOverlap</a> { <ul class="subs"><li><a href="#v:isSafeOverlap">isSafeOverlap</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li></ul> }</li><li>| <a href="#v:OverlapOk">OverlapOk</a> { <ul class="subs"><li><a href="#v:isSafeOverlap">isSafeOverlap</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li></ul> }</li><li>| <a href="#v:Incoherent">Incoherent</a> { <ul class="subs"><li><a href="#v:isSafeOverlap">isSafeOverlap</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li></ul> }</li></ul></li><li class="src short"><span class="keyword">data</span> <a href="#t:Instance">Instance</a> = <a href="#v:Instance">Instance</a> {<ul class="subs"><li><a href="#v:is_cls">is_cls</a> :: <a href="Name.html#t:Name">Name</a></li><li><a href="#v:is_tcs">is_tcs</a> :: [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>]</li><li><a href="#v:is_tvs">is_tvs</a> :: <a href="VarSet.html#t:TyVarSet">TyVarSet</a></li><li><a href="#v:is_tys">is_tys</a> :: [<a href="Type.html#t:Type">Type</a>]</li><li><a href="#v:is_dfun">is_dfun</a> :: <a href="InstEnv.html#t:DFunId">DFunId</a></li><li><a href="#v:is_flag">is_flag</a> :: <a href="InstEnv.html#t:OverlapFlag">OverlapFlag</a></li></ul>}</li><li class="src short"><a href="#v:pprInstance">pprInstance</a> :: <a href="InstEnv.html#t:Instance">Instance</a> -> <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:pprInstanceHdr">pprInstanceHdr</a> :: <a href="InstEnv.html#t:Instance">Instance</a> -> <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:pprInstances">pprInstances</a> :: [<a href="InstEnv.html#t:Instance">Instance</a>] -> <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:instanceHead">instanceHead</a> :: <a href="InstEnv.html#t:Instance">Instance</a> -> ([<a href="Var.html#t:TyVar">TyVar</a>], <a href="Type.html#t:ThetaType">ThetaType</a>, <a href="Class.html#t:Class">Class</a>, [<a href="Type.html#t:Type">Type</a>])</li><li class="src short"><a href="#v:mkLocalInstance">mkLocalInstance</a> :: <a href="InstEnv.html#t:DFunId">DFunId</a> -> <a href="InstEnv.html#t:OverlapFlag">OverlapFlag</a> -> <a href="InstEnv.html#t:Instance">Instance</a></li><li class="src short"><a href="#v:mkImportedInstance">mkImportedInstance</a> :: <a href="Name.html#t:Name">Name</a> -> [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>] -> <a href="InstEnv.html#t:DFunId">DFunId</a> -> <a href="InstEnv.html#t:OverlapFlag">OverlapFlag</a> -> <a href="InstEnv.html#t:Instance">Instance</a></li><li class="src short"><a href="#v:instanceDFunId">instanceDFunId</a> :: <a href="InstEnv.html#t:Instance">Instance</a> -> <a href="InstEnv.html#t:DFunId">DFunId</a></li><li class="src short"><a href="#v:setInstanceDFunId">setInstanceDFunId</a> :: <a href="InstEnv.html#t:Instance">Instance</a> -> <a href="InstEnv.html#t:DFunId">DFunId</a> -> <a href="InstEnv.html#t:Instance">Instance</a></li><li class="src short"><a href="#v:instanceRoughTcs">instanceRoughTcs</a> :: <a href="InstEnv.html#t:Instance">Instance</a> -> [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>]</li><li class="src short"><span class="keyword">type</span> <a href="#t:InstEnv">InstEnv</a> = <a href="UniqFM.html#t:UniqFM">UniqFM</a> ClsInstEnv</li><li class="src short"><a href="#v:emptyInstEnv">emptyInstEnv</a> :: <a href="InstEnv.html#t:InstEnv">InstEnv</a></li><li class="src short"><a href="#v:extendInstEnv">extendInstEnv</a> :: <a href="InstEnv.html#t:InstEnv">InstEnv</a> -> <a href="InstEnv.html#t:Instance">Instance</a> -> <a href="InstEnv.html#t:InstEnv">InstEnv</a></li><li class="src short"><a href="#v:overwriteInstEnv">overwriteInstEnv</a> :: <a href="InstEnv.html#t:InstEnv">InstEnv</a> -> <a href="InstEnv.html#t:Instance">Instance</a> -> <a href="InstEnv.html#t:InstEnv">InstEnv</a></li><li class="src short"><a href="#v:extendInstEnvList">extendInstEnvList</a> :: <a href="InstEnv.html#t:InstEnv">InstEnv</a> -> [<a href="InstEnv.html#t:Instance">Instance</a>] -> <a href="InstEnv.html#t:InstEnv">InstEnv</a></li><li class="src short"><a href="#v:lookupUniqueInstEnv">lookupUniqueInstEnv</a> :: (<a href="InstEnv.html#t:InstEnv">InstEnv</a>, <a href="InstEnv.html#t:InstEnv">InstEnv</a>) -> <a href="Class.html#t:Class">Class</a> -> [<a href="Type.html#t:Type">Type</a>] -> <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> <a href="ErrUtils.html#t:Message">Message</a> (<a href="InstEnv.html#t:Instance">Instance</a>, [<a href="Type.html#t:Type">Type</a>])</li><li class="src short"><a href="#v:lookupInstEnv-39-">lookupInstEnv'</a> :: <a href="InstEnv.html#t:InstEnv">InstEnv</a> -> <a href="Class.html#t:Class">Class</a> -> [<a href="Type.html#t:Type">Type</a>] -> ([InstMatch], [<a href="InstEnv.html#t:Instance">Instance</a>])</li><li class="src short"><a href="#v:lookupInstEnv">lookupInstEnv</a> :: (<a href="InstEnv.html#t:InstEnv">InstEnv</a>, <a href="InstEnv.html#t:InstEnv">InstEnv</a>) -> <a href="Class.html#t:Class">Class</a> -> [<a href="Type.html#t:Type">Type</a>] -> ([InstMatch], [<a href="InstEnv.html#t:Instance">Instance</a>], <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>)</li><li class="src short"><a href="#v:instEnvElts">instEnvElts</a> :: <a href="InstEnv.html#t:InstEnv">InstEnv</a> -> [<a href="InstEnv.html#t:Instance">Instance</a>]</li><li class="src short"><a href="#v:classInstances">classInstances</a> :: (<a href="InstEnv.html#t:InstEnv">InstEnv</a>, <a href="InstEnv.html#t:InstEnv">InstEnv</a>) -> <a href="Class.html#t:Class">Class</a> -> [<a href="InstEnv.html#t:Instance">Instance</a>]</li><li class="src short"><a href="#v:instanceBindFun">instanceBindFun</a> :: <a href="Var.html#t:TyVar">TyVar</a> -> <a href="Unify.html#t:BindFlag">BindFlag</a></li><li class="src short"><a href="#v:instanceCantMatch">instanceCantMatch</a> :: [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>] -> [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:roughMatchTcs">roughMatchTcs</a> :: [<a href="Type.html#t:Type">Type</a>] -> [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>]</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:DFunId" class="def">DFunId</a> = <a href="Var.html#t:Id">Id</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:OverlapFlag" class="def">OverlapFlag</a> </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:NoOverlap" class="def">NoOverlap</a></td><td class="doc"><p>This instance must not overlap another </p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:isSafeOverlap" class="def">isSafeOverlap</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty"> </dd></dl><div class="clear"></div></div></td></tr><tr><td class="src"><a name="v:OverlapOk" class="def">OverlapOk</a></td><td class="doc"><p>Silently ignore this instance if you find a more specific one that matches the constraint you are trying to resolve </p><p>Example: constraint (Foo [Int]) instances (Foo [Int]) (Foo [a]) OverlapOk Since the second instance has the OverlapOk flag, the first instance will be chosen (otherwise its ambiguous which to choose) </p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:isSafeOverlap" class="def">isSafeOverlap</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty"> </dd></dl><div class="clear"></div></div></td></tr><tr><td class="src"><a name="v:Incoherent" class="def">Incoherent</a></td><td class="doc"><p>Like OverlapOk, but also ignore this instance if it doesn't match the constraint you are trying to resolve, but could match if the type variables in the constraint were instantiated </p><p>Example: constraint (Foo [b]) instances (Foo [Int]) Incoherent (Foo [a]) Without the Incoherent flag, we'd complain that instantiating <code>b</code> would change which instance was chosen </p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:isSafeOverlap" class="def">isSafeOverlap</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty"> </dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:OverlapFlag" class="caption collapser" onclick="toggleSection('i:OverlapFlag')">Instances</p><div id="section.i:OverlapFlag" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="InstEnv.html#t:OverlapFlag">OverlapFlag</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Data.html#t:Data">Data</a> <a href="InstEnv.html#t:OverlapFlag">OverlapFlag</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="InstEnv.html#t:OverlapFlag">OverlapFlag</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="InstEnv.html#t:OverlapFlag">OverlapFlag</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Binary.html#t:Binary">Binary</a> <a href="InstEnv.html#t:OverlapFlag">OverlapFlag</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Instance" class="def">Instance</a> </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Instance" class="def">Instance</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:is_cls" class="def">is_cls</a> :: <a href="Name.html#t:Name">Name</a></dt><dd class="doc empty"> </dd><dt class="src"><a name="v:is_tcs" class="def">is_tcs</a> :: [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>]</dt><dd class="doc empty"> </dd><dt class="src"><a name="v:is_tvs" class="def">is_tvs</a> :: <a href="VarSet.html#t:TyVarSet">TyVarSet</a></dt><dd class="doc empty"> </dd><dt class="src"><a name="v:is_tys" class="def">is_tys</a> :: [<a href="Type.html#t:Type">Type</a>]</dt><dd class="doc empty"> </dd><dt class="src"><a name="v:is_dfun" class="def">is_dfun</a> :: <a href="InstEnv.html#t:DFunId">DFunId</a></dt><dd class="doc empty"> </dd><dt class="src"><a name="v:is_flag" class="def">is_flag</a> :: <a href="InstEnv.html#t:OverlapFlag">OverlapFlag</a></dt><dd class="doc empty"> </dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Instance" class="caption collapser" onclick="toggleSection('i:Instance')">Instances</p><div id="section.i:Instance" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Data.html#t:Data">Data</a> <a href="InstEnv.html#t:Instance">Instance</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="InstEnv.html#t:Instance">Instance</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="InstEnv.html#t:Instance">Instance</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Name.html#t:NamedThing">NamedThing</a> <a href="InstEnv.html#t:Instance">Instance</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:pprInstance" class="def">pprInstance</a> :: <a href="InstEnv.html#t:Instance">Instance</a> -> <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:pprInstanceHdr" class="def">pprInstanceHdr</a> :: <a href="InstEnv.html#t:Instance">Instance</a> -> <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:pprInstances" class="def">pprInstances</a> :: [<a href="InstEnv.html#t:Instance">Instance</a>] -> <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:instanceHead" class="def">instanceHead</a> :: <a href="InstEnv.html#t:Instance">Instance</a> -> ([<a href="Var.html#t:TyVar">TyVar</a>], <a href="Type.html#t:ThetaType">ThetaType</a>, <a href="Class.html#t:Class">Class</a>, [<a href="Type.html#t:Type">Type</a>])</p></div><div class="top"><p class="src"><a name="v:mkLocalInstance" class="def">mkLocalInstance</a> :: <a href="InstEnv.html#t:DFunId">DFunId</a> -> <a href="InstEnv.html#t:OverlapFlag">OverlapFlag</a> -> <a href="InstEnv.html#t:Instance">Instance</a></p></div><div class="top"><p class="src"><a name="v:mkImportedInstance" class="def">mkImportedInstance</a> :: <a href="Name.html#t:Name">Name</a> -> [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>] -> <a href="InstEnv.html#t:DFunId">DFunId</a> -> <a href="InstEnv.html#t:OverlapFlag">OverlapFlag</a> -> <a href="InstEnv.html#t:Instance">Instance</a></p></div><div class="top"><p class="src"><a name="v:instanceDFunId" class="def">instanceDFunId</a> :: <a href="InstEnv.html#t:Instance">Instance</a> -> <a href="InstEnv.html#t:DFunId">DFunId</a></p></div><div class="top"><p class="src"><a name="v:setInstanceDFunId" class="def">setInstanceDFunId</a> :: <a href="InstEnv.html#t:Instance">Instance</a> -> <a href="InstEnv.html#t:DFunId">DFunId</a> -> <a href="InstEnv.html#t:Instance">Instance</a></p></div><div class="top"><p class="src"><a name="v:instanceRoughTcs" class="def">instanceRoughTcs</a> :: <a href="InstEnv.html#t:Instance">Instance</a> -> [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>]</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:InstEnv" class="def">InstEnv</a> = <a href="UniqFM.html#t:UniqFM">UniqFM</a> ClsInstEnv</p></div><div class="top"><p class="src"><a name="v:emptyInstEnv" class="def">emptyInstEnv</a> :: <a href="InstEnv.html#t:InstEnv">InstEnv</a></p></div><div class="top"><p class="src"><a name="v:extendInstEnv" class="def">extendInstEnv</a> :: <a href="InstEnv.html#t:InstEnv">InstEnv</a> -> <a href="InstEnv.html#t:Instance">Instance</a> -> <a href="InstEnv.html#t:InstEnv">InstEnv</a></p></div><div class="top"><p class="src"><a name="v:overwriteInstEnv" class="def">overwriteInstEnv</a> :: <a href="InstEnv.html#t:InstEnv">InstEnv</a> -> <a href="InstEnv.html#t:Instance">Instance</a> -> <a href="InstEnv.html#t:InstEnv">InstEnv</a></p></div><div class="top"><p class="src"><a name="v:extendInstEnvList" class="def">extendInstEnvList</a> :: <a href="InstEnv.html#t:InstEnv">InstEnv</a> -> [<a href="InstEnv.html#t:Instance">Instance</a>] -> <a href="InstEnv.html#t:InstEnv">InstEnv</a></p></div><div class="top"><p class="src"><a name="v:lookupUniqueInstEnv" class="def">lookupUniqueInstEnv</a> :: (<a href="InstEnv.html#t:InstEnv">InstEnv</a>, <a href="InstEnv.html#t:InstEnv">InstEnv</a>) -> <a href="Class.html#t:Class">Class</a> -> [<a href="Type.html#t:Type">Type</a>] -> <a href="../base-4.5.1.0/Data-Either.html#t:Either">Either</a> <a href="ErrUtils.html#t:Message">Message</a> (<a href="InstEnv.html#t:Instance">Instance</a>, [<a href="Type.html#t:Type">Type</a>])</p><div class="doc"><p>Look up an instance in the given instance environment. The given class application must match exactly one instance and the match may not contain any flexi type variables. If the lookup is unsuccessful, yield 'Left errorMessage'. </p></div></div><div class="top"><p class="src"><a name="v:lookupInstEnv-39-" class="def">lookupInstEnv'</a> :: <a href="InstEnv.html#t:InstEnv">InstEnv</a> -> <a href="Class.html#t:Class">Class</a> -> [<a href="Type.html#t:Type">Type</a>] -> ([InstMatch], [<a href="InstEnv.html#t:Instance">Instance</a>])</p></div><div class="top"><p class="src"><a name="v:lookupInstEnv" class="def">lookupInstEnv</a> :: (<a href="InstEnv.html#t:InstEnv">InstEnv</a>, <a href="InstEnv.html#t:InstEnv">InstEnv</a>) -> <a href="Class.html#t:Class">Class</a> -> [<a href="Type.html#t:Type">Type</a>] -> ([InstMatch], [<a href="InstEnv.html#t:Instance">Instance</a>], <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>)</p></div><div class="top"><p class="src"><a name="v:instEnvElts" class="def">instEnvElts</a> :: <a href="InstEnv.html#t:InstEnv">InstEnv</a> -> [<a href="InstEnv.html#t:Instance">Instance</a>]</p></div><div class="top"><p class="src"><a name="v:classInstances" class="def">classInstances</a> :: (<a href="InstEnv.html#t:InstEnv">InstEnv</a>, <a href="InstEnv.html#t:InstEnv">InstEnv</a>) -> <a href="Class.html#t:Class">Class</a> -> [<a href="InstEnv.html#t:Instance">Instance</a>]</p></div><div class="top"><p class="src"><a name="v:instanceBindFun" class="def">instanceBindFun</a> :: <a href="Var.html#t:TyVar">TyVar</a> -> <a href="Unify.html#t:BindFlag">BindFlag</a></p></div><div class="top"><p class="src"><a name="v:instanceCantMatch" class="def">instanceCantMatch</a> :: [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>] -> [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>] -> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:roughMatchTcs" class="def">roughMatchTcs</a> :: [<a href="Type.html#t:Type">Type</a>] -> [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>]</p></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.11.0</p></div></body></html>