Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 8d1ef08c9e0d44c69764afc615a03d0d > files > 1698

ghc-ghc-devel-6.12.3-5.fc14.i686.rpm

<?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://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
<title>main/DriverPhases.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span>
<a name="line-2"></a><span class='hs-comment'>--  $Id: DriverPhases.hs,v 1.38 2005/05/17 11:01:59 simonmar Exp $</span>
<a name="line-3"></a><span class='hs-comment'>--</span>
<a name="line-4"></a><span class='hs-comment'>-- GHC Driver</span>
<a name="line-5"></a><span class='hs-comment'>--</span>
<a name="line-6"></a><span class='hs-comment'>-- (c) The University of Glasgow 2002</span>
<a name="line-7"></a><span class='hs-comment'>--</span>
<a name="line-8"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span>
<a name="line-9"></a>
<a name="line-10"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>DriverPhases</span> <span class='hs-layout'>(</span>
<a name="line-11"></a>   <span class='hs-conid'>HscSource</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>isHsBoot</span><span class='hs-layout'>,</span> <span class='hs-varid'>hscSourceString</span><span class='hs-layout'>,</span>
<a name="line-12"></a>   <span class='hs-conid'>Phase</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-13"></a>   <span class='hs-varid'>happensBefore</span><span class='hs-layout'>,</span> <span class='hs-varid'>eqPhase</span><span class='hs-layout'>,</span> <span class='hs-varid'>anyHsc</span><span class='hs-layout'>,</span> <span class='hs-varid'>isStopLn</span><span class='hs-layout'>,</span>
<a name="line-14"></a>   <span class='hs-varid'>startPhase</span><span class='hs-layout'>,</span>		<span class='hs-comment'>-- :: String -&gt; Phase</span>
<a name="line-15"></a>   <span class='hs-varid'>phaseInputExt</span><span class='hs-layout'>,</span> 	<span class='hs-comment'>-- :: Phase -&gt; String</span>
<a name="line-16"></a>
<a name="line-17"></a>   <span class='hs-varid'>isHaskellishSuffix</span><span class='hs-layout'>,</span> 
<a name="line-18"></a>   <span class='hs-varid'>isHaskellSrcSuffix</span><span class='hs-layout'>,</span>
<a name="line-19"></a>   <span class='hs-varid'>isObjectSuffix</span><span class='hs-layout'>,</span>
<a name="line-20"></a>   <span class='hs-varid'>isCishSuffix</span><span class='hs-layout'>,</span>
<a name="line-21"></a>   <span class='hs-varid'>isExtCoreSuffix</span><span class='hs-layout'>,</span>
<a name="line-22"></a>   <span class='hs-varid'>isDynLibSuffix</span><span class='hs-layout'>,</span>
<a name="line-23"></a>   <span class='hs-varid'>isHaskellUserSrcSuffix</span><span class='hs-layout'>,</span>
<a name="line-24"></a>   <span class='hs-varid'>isSourceSuffix</span><span class='hs-layout'>,</span>
<a name="line-25"></a>
<a name="line-26"></a>   <span class='hs-varid'>isHaskellishFilename</span><span class='hs-layout'>,</span> 
<a name="line-27"></a>   <span class='hs-varid'>isHaskellSrcFilename</span><span class='hs-layout'>,</span>
<a name="line-28"></a>   <span class='hs-varid'>isObjectFilename</span><span class='hs-layout'>,</span>
<a name="line-29"></a>   <span class='hs-varid'>isCishFilename</span><span class='hs-layout'>,</span>
<a name="line-30"></a>   <span class='hs-varid'>isExtCoreFilename</span><span class='hs-layout'>,</span>
<a name="line-31"></a>   <span class='hs-varid'>isDynLibFilename</span><span class='hs-layout'>,</span>
<a name="line-32"></a>   <span class='hs-varid'>isHaskellUserSrcFilename</span><span class='hs-layout'>,</span>
<a name="line-33"></a>   <span class='hs-varid'>isSourceFilename</span>         <span class='hs-comment'>-- :: FilePath -&gt; Bool</span>
<a name="line-34"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-35"></a>
<a name="line-36"></a><span class='hs-cpp'>#include "HsVersions.h"</span>
<a name="line-37"></a>
<a name="line-38"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Panic</span>		<span class='hs-layout'>(</span> <span class='hs-varid'>panic</span> <span class='hs-layout'>)</span>
<a name="line-39"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>FilePath</span>
<a name="line-40"></a>
<a name="line-41"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span>
<a name="line-42"></a><span class='hs-comment'>-- Phases</span>
<a name="line-43"></a>
<a name="line-44"></a><span class='hs-comment'>{-
<a name="line-45"></a>   Phase of the           | Suffix saying | Flag saying   | (suffix of)
<a name="line-46"></a>   compilation system     | ``start here''| ``stop after''| output file
<a name="line-47"></a>   
<a name="line-48"></a>   literate pre-processor | .lhs          | -             | -
<a name="line-49"></a>   C pre-processor (opt.) | -             | -E            | -
<a name="line-50"></a>   Haskell compiler       | .hs           | -C, -S        | .hc, .s
<a name="line-51"></a>   C compiler (opt.)      | .hc or .c     | -S            | .s
<a name="line-52"></a>   assembler              | .s  or .S     | -c            | .o
<a name="line-53"></a>   linker                 | other         | -             | a.out
<a name="line-54"></a>-}</span>
<a name="line-55"></a>
<a name="line-56"></a><a name="HscSource"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>HscSource</span>
<a name="line-57"></a>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>HsSrcFile</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsBootFile</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ExtCoreFile</span>
<a name="line-58"></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-59"></a>	<span class='hs-comment'>-- Ord needed for the finite maps we build in CompManager</span>
<a name="line-60"></a>
<a name="line-61"></a>
<a name="line-62"></a><a name="hscSourceString"></a><span class='hs-definition'>hscSourceString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>HscSource</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-63"></a><span class='hs-definition'>hscSourceString</span> <span class='hs-conid'>HsSrcFile</span>   <span class='hs-keyglyph'>=</span> <span class='hs-str'>""</span>
<a name="line-64"></a><span class='hs-definition'>hscSourceString</span> <span class='hs-conid'>HsBootFile</span>  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"[boot]"</span>
<a name="line-65"></a><span class='hs-definition'>hscSourceString</span> <span class='hs-conid'>ExtCoreFile</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"[ext core]"</span>
<a name="line-66"></a>
<a name="line-67"></a><a name="isHsBoot"></a><span class='hs-definition'>isHsBoot</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>HscSource</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-68"></a><span class='hs-definition'>isHsBoot</span> <span class='hs-conid'>HsBootFile</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-69"></a><span class='hs-definition'>isHsBoot</span> <span class='hs-keyword'>_</span>          <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-70"></a>
<a name="line-71"></a><a name="Phase"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Phase</span> 
<a name="line-72"></a>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Unlit</span> <span class='hs-conid'>HscSource</span>
<a name="line-73"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Cpp</span>   <span class='hs-conid'>HscSource</span>
<a name="line-74"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>HsPp</span>  <span class='hs-conid'>HscSource</span>
<a name="line-75"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Hsc</span>   <span class='hs-conid'>HscSource</span>
<a name="line-76"></a>        <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Ccpp</span>
<a name="line-77"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Cc</span>
<a name="line-78"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>HCc</span>		<span class='hs-comment'>-- Haskellised C (as opposed to vanilla C) compilation</span>
<a name="line-79"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Mangle</span>	<span class='hs-comment'>-- assembly mangling, now done by a separate script.</span>
<a name="line-80"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>SplitMangle</span>	<span class='hs-comment'>-- after mangler if splitting</span>
<a name="line-81"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>SplitAs</span>
<a name="line-82"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>As</span>
<a name="line-83"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>CmmCpp</span>	<span class='hs-comment'>-- pre-process Cmm source</span>
<a name="line-84"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>Cmm</span>		<span class='hs-comment'>-- parse &amp; compile Cmm code</span>
<a name="line-85"></a>
<a name="line-86"></a>	<span class='hs-comment'>-- The final phase is a pseudo-phase that tells the pipeline to stop.</span>
<a name="line-87"></a>	<span class='hs-comment'>-- There is no runPhase case for it.</span>
<a name="line-88"></a>	<span class='hs-keyglyph'>|</span> <span class='hs-conid'>StopLn</span>	<span class='hs-comment'>-- Stop, but linking will follow, so generate .o file</span>
<a name="line-89"></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-90"></a>
<a name="line-91"></a><a name="anyHsc"></a><span class='hs-definition'>anyHsc</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Phase</span>
<a name="line-92"></a><span class='hs-definition'>anyHsc</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Hsc</span> <span class='hs-layout'>(</span><span class='hs-varid'>panic</span> <span class='hs-str'>"anyHsc"</span><span class='hs-layout'>)</span>
<a name="line-93"></a>
<a name="line-94"></a><a name="isStopLn"></a><span class='hs-definition'>isStopLn</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Phase</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-95"></a><span class='hs-definition'>isStopLn</span> <span class='hs-conid'>StopLn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-96"></a><span class='hs-definition'>isStopLn</span> <span class='hs-keyword'>_</span>      <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-97"></a>
<a name="line-98"></a><a name="eqPhase"></a><span class='hs-definition'>eqPhase</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Phase</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Phase</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-99"></a><span class='hs-comment'>-- Equality of constructors, ignoring the HscSource field</span>
<a name="line-100"></a><span class='hs-comment'>-- NB: the HscSource field can be 'bot'; see anyHsc above</span>
<a name="line-101"></a><span class='hs-definition'>eqPhase</span> <span class='hs-layout'>(</span><span class='hs-conid'>Unlit</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>   <span class='hs-layout'>(</span><span class='hs-conid'>Unlit</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> 	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-102"></a><span class='hs-definition'>eqPhase</span> <span class='hs-layout'>(</span><span class='hs-conid'>Cpp</span>   <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>   <span class='hs-layout'>(</span><span class='hs-conid'>Cpp</span>   <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> 	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-103"></a><span class='hs-definition'>eqPhase</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsPp</span>  <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>   <span class='hs-layout'>(</span><span class='hs-conid'>HsPp</span>  <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> 	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-104"></a><span class='hs-definition'>eqPhase</span> <span class='hs-layout'>(</span><span class='hs-conid'>Hsc</span>   <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>   <span class='hs-layout'>(</span><span class='hs-conid'>Hsc</span>   <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> 	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-105"></a><span class='hs-definition'>eqPhase</span> <span class='hs-conid'>Ccpp</span>	    <span class='hs-conid'>Ccpp</span>        <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-106"></a><span class='hs-definition'>eqPhase</span> <span class='hs-conid'>Cc</span>	    <span class='hs-conid'>Cc</span>	        <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-107"></a><span class='hs-definition'>eqPhase</span> <span class='hs-conid'>HCc</span>	    <span class='hs-conid'>HCc</span>		<span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-108"></a><span class='hs-definition'>eqPhase</span> <span class='hs-conid'>Mangle</span>	    <span class='hs-conid'>Mangle</span>    	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-109"></a><span class='hs-definition'>eqPhase</span> <span class='hs-conid'>SplitMangle</span> <span class='hs-conid'>SplitMangle</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-110"></a><span class='hs-definition'>eqPhase</span> <span class='hs-conid'>SplitAs</span>	    <span class='hs-conid'>SplitAs</span> 	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-111"></a><span class='hs-definition'>eqPhase</span> <span class='hs-conid'>As</span>	    <span class='hs-conid'>As</span> 		<span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-112"></a><span class='hs-definition'>eqPhase</span> <span class='hs-conid'>CmmCpp</span>	    <span class='hs-conid'>CmmCpp</span> 	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-113"></a><span class='hs-definition'>eqPhase</span> <span class='hs-conid'>Cmm</span>	    <span class='hs-conid'>Cmm</span> 	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-114"></a><span class='hs-definition'>eqPhase</span> <span class='hs-conid'>StopLn</span>	    <span class='hs-conid'>StopLn</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-115"></a><span class='hs-definition'>eqPhase</span> <span class='hs-keyword'>_</span>	    <span class='hs-keyword'>_</span>		<span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-116"></a>
<a name="line-117"></a><a name="happensBefore"></a><span class='hs-comment'>-- Partial ordering on phases: we want to know which phases will occur before </span>
<a name="line-118"></a><span class='hs-comment'>-- which others.  This is used for sanity checking, to ensure that the</span>
<a name="line-119"></a><span class='hs-comment'>-- pipeline will stop at some point (see DriverPipeline.runPipeline).</span>
<a name="line-120"></a><span class='hs-definition'>happensBefore</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Phase</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Phase</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-121"></a><span class='hs-conid'>StopLn</span> <span class='hs-varop'>`happensBefore`</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-122"></a><a name="happensBefore"></a><span class='hs-definition'>x</span>      <span class='hs-varop'>`happensBefore`</span> <span class='hs-varid'>y</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>after_x</span> <span class='hs-varop'>`eqPhase`</span> <span class='hs-varid'>y</span> <span class='hs-varop'>||</span> <span class='hs-varid'>after_x</span> <span class='hs-varop'>`happensBefore`</span> <span class='hs-varid'>y</span>
<a name="line-123"></a>	<span class='hs-keyword'>where</span>
<a name="line-124"></a>	  <span class='hs-varid'>after_x</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>nextPhase</span> <span class='hs-varid'>x</span>
<a name="line-125"></a>
<a name="line-126"></a><a name="nextPhase"></a><span class='hs-definition'>nextPhase</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Phase</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Phase</span>
<a name="line-127"></a><span class='hs-comment'>-- A conservative approximation the next phase, used in happensBefore</span>
<a name="line-128"></a><span class='hs-definition'>nextPhase</span> <span class='hs-layout'>(</span><span class='hs-conid'>Unlit</span> <span class='hs-varid'>sf</span><span class='hs-layout'>)</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Cpp</span>  <span class='hs-varid'>sf</span>
<a name="line-129"></a><span class='hs-definition'>nextPhase</span> <span class='hs-layout'>(</span><span class='hs-conid'>Cpp</span>   <span class='hs-varid'>sf</span><span class='hs-layout'>)</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>HsPp</span> <span class='hs-varid'>sf</span>
<a name="line-130"></a><span class='hs-definition'>nextPhase</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsPp</span>  <span class='hs-varid'>sf</span><span class='hs-layout'>)</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Hsc</span>  <span class='hs-varid'>sf</span>
<a name="line-131"></a><span class='hs-definition'>nextPhase</span> <span class='hs-layout'>(</span><span class='hs-conid'>Hsc</span>   <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>HCc</span>
<a name="line-132"></a><span class='hs-definition'>nextPhase</span> <span class='hs-conid'>HCc</span>		<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mangle</span>
<a name="line-133"></a><span class='hs-definition'>nextPhase</span> <span class='hs-conid'>Mangle</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>SplitMangle</span>
<a name="line-134"></a><span class='hs-definition'>nextPhase</span> <span class='hs-conid'>SplitMangle</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>As</span>
<a name="line-135"></a><span class='hs-definition'>nextPhase</span> <span class='hs-conid'>As</span>		<span class='hs-keyglyph'>=</span> <span class='hs-conid'>SplitAs</span>
<a name="line-136"></a><span class='hs-definition'>nextPhase</span> <span class='hs-conid'>SplitAs</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>StopLn</span>
<a name="line-137"></a><span class='hs-definition'>nextPhase</span> <span class='hs-conid'>Ccpp</span>		<span class='hs-keyglyph'>=</span> <span class='hs-conid'>As</span>
<a name="line-138"></a><span class='hs-definition'>nextPhase</span> <span class='hs-conid'>Cc</span>		<span class='hs-keyglyph'>=</span> <span class='hs-conid'>As</span>
<a name="line-139"></a><span class='hs-definition'>nextPhase</span> <span class='hs-conid'>CmmCpp</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>Cmm</span>
<a name="line-140"></a><span class='hs-definition'>nextPhase</span> <span class='hs-conid'>Cmm</span>		<span class='hs-keyglyph'>=</span> <span class='hs-conid'>HCc</span>
<a name="line-141"></a><span class='hs-definition'>nextPhase</span> <span class='hs-conid'>StopLn</span>	<span class='hs-keyglyph'>=</span> <span class='hs-varid'>panic</span> <span class='hs-str'>"nextPhase: nothing after StopLn"</span>
<a name="line-142"></a>
<a name="line-143"></a><a name="startPhase"></a><span class='hs-comment'>-- the first compilation phase for a given file is determined</span>
<a name="line-144"></a><span class='hs-comment'>-- by its suffix.</span>
<a name="line-145"></a><span class='hs-definition'>startPhase</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Phase</span>
<a name="line-146"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"lhs"</span>      <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Unlit</span> <span class='hs-conid'>HsSrcFile</span>
<a name="line-147"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"lhs-boot"</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Unlit</span> <span class='hs-conid'>HsBootFile</span>
<a name="line-148"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"hs"</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Cpp</span>   <span class='hs-conid'>HsSrcFile</span>
<a name="line-149"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"hs-boot"</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Cpp</span>   <span class='hs-conid'>HsBootFile</span>
<a name="line-150"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"hscpp"</span>    <span class='hs-keyglyph'>=</span> <span class='hs-conid'>HsPp</span>  <span class='hs-conid'>HsSrcFile</span>
<a name="line-151"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"hspp"</span>     <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Hsc</span>   <span class='hs-conid'>HsSrcFile</span>
<a name="line-152"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"hcr"</span>      <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Hsc</span>   <span class='hs-conid'>ExtCoreFile</span>
<a name="line-153"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"hc"</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>HCc</span>
<a name="line-154"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"c"</span>        <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Cc</span>
<a name="line-155"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"cpp"</span>      <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Ccpp</span>
<a name="line-156"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"C"</span>        <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Cc</span>
<a name="line-157"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"cc"</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Ccpp</span>
<a name="line-158"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"cxx"</span>      <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Ccpp</span>
<a name="line-159"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"raw_s"</span>    <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mangle</span>
<a name="line-160"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"split_s"</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SplitMangle</span>
<a name="line-161"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"s"</span>        <span class='hs-keyglyph'>=</span> <span class='hs-conid'>As</span>
<a name="line-162"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"S"</span>        <span class='hs-keyglyph'>=</span> <span class='hs-conid'>As</span>
<a name="line-163"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"o"</span>        <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StopLn</span>
<a name="line-164"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"cmm"</span>      <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CmmCpp</span>
<a name="line-165"></a><span class='hs-definition'>startPhase</span> <span class='hs-str'>"cmmcpp"</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Cmm</span>
<a name="line-166"></a><span class='hs-definition'>startPhase</span> <span class='hs-keyword'>_</span>          <span class='hs-keyglyph'>=</span> <span class='hs-conid'>StopLn</span>	   <span class='hs-comment'>-- all unknown file types</span>
<a name="line-167"></a>
<a name="line-168"></a><a name="phaseInputExt"></a><span class='hs-comment'>-- This is used to determine the extension for the output from the</span>
<a name="line-169"></a><span class='hs-comment'>-- current phase (if it generates a new file).  The extension depends</span>
<a name="line-170"></a><span class='hs-comment'>-- on the next phase in the pipeline.</span>
<a name="line-171"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Phase</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span>
<a name="line-172"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-layout'>(</span><span class='hs-conid'>Unlit</span> <span class='hs-conid'>HsSrcFile</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>=</span> <span class='hs-str'>"lhs"</span>
<a name="line-173"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-layout'>(</span><span class='hs-conid'>Unlit</span> <span class='hs-conid'>HsBootFile</span><span class='hs-layout'>)</span>  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"lhs-boot"</span>
<a name="line-174"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-layout'>(</span><span class='hs-conid'>Unlit</span> <span class='hs-conid'>ExtCoreFile</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"lhcr"</span>
<a name="line-175"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-layout'>(</span><span class='hs-conid'>Cpp</span>   <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>  	  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"lpp"</span>	<span class='hs-comment'>-- intermediate only</span>
<a name="line-176"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-layout'>(</span><span class='hs-conid'>HsPp</span>  <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>		  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"hscpp"</span>	<span class='hs-comment'>-- intermediate only</span>
<a name="line-177"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-layout'>(</span><span class='hs-conid'>Hsc</span>   <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>  	  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"hspp"</span>	<span class='hs-comment'>-- intermediate only</span>
<a name="line-178"></a>	<span class='hs-comment'>-- NB: as things stand, phaseInputExt (Hsc x) must not evaluate x</span>
<a name="line-179"></a>	<span class='hs-comment'>--     because runPipeline uses the StopBefore phase to pick the</span>
<a name="line-180"></a>	<span class='hs-comment'>--     output filename.  That could be fixed, but watch out.</span>
<a name="line-181"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-conid'>HCc</span>         	  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"hc"</span>  
<a name="line-182"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-conid'>Ccpp</span>          	  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"cpp"</span>
<a name="line-183"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-conid'>Cc</span>          	  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"c"</span>
<a name="line-184"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-conid'>Mangle</span>      	  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"raw_s"</span>
<a name="line-185"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-conid'>SplitMangle</span> 	  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"split_s"</span>	<span class='hs-comment'>-- not really generated</span>
<a name="line-186"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-conid'>As</span>          	  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"s"</span>
<a name="line-187"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-conid'>SplitAs</span>     	  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"split_s"</span>   <span class='hs-comment'>-- not really generated</span>
<a name="line-188"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-conid'>CmmCpp</span>	  	  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"cmm"</span>
<a name="line-189"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-conid'>Cmm</span>	  	  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"cmmcpp"</span>
<a name="line-190"></a><span class='hs-definition'>phaseInputExt</span> <span class='hs-conid'>StopLn</span>          	  <span class='hs-keyglyph'>=</span> <span class='hs-str'>"o"</span>
<a name="line-191"></a>
<a name="line-192"></a><a name="haskellish_src_suffixes"></a><span class='hs-definition'>haskellish_src_suffixes</span><span class='hs-layout'>,</span> <span class='hs-varid'>haskellish_suffixes</span><span class='hs-layout'>,</span> <span class='hs-varid'>cish_suffixes</span><span class='hs-layout'>,</span>
<a name="line-193"></a>    <span class='hs-varid'>extcoreish_suffixes</span><span class='hs-layout'>,</span> <span class='hs-varid'>haskellish_user_src_suffixes</span>
<a name="line-194"></a> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-195"></a><span class='hs-definition'>haskellish_src_suffixes</span>      <span class='hs-keyglyph'>=</span> <span class='hs-varid'>haskellish_user_src_suffixes</span> <span class='hs-varop'>++</span>
<a name="line-196"></a>                               <span class='hs-keyglyph'>[</span> <span class='hs-str'>"hspp"</span><span class='hs-layout'>,</span> <span class='hs-str'>"hscpp"</span><span class='hs-layout'>,</span> <span class='hs-str'>"hcr"</span><span class='hs-layout'>,</span> <span class='hs-str'>"cmm"</span> <span class='hs-keyglyph'>]</span>
<a name="line-197"></a><a name="haskellish_suffixes"></a><span class='hs-definition'>haskellish_suffixes</span>          <span class='hs-keyglyph'>=</span> <span class='hs-varid'>haskellish_src_suffixes</span> <span class='hs-varop'>++</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>"hc"</span><span class='hs-layout'>,</span> <span class='hs-str'>"raw_s"</span><span class='hs-keyglyph'>]</span>
<a name="line-198"></a><a name="cish_suffixes"></a><span class='hs-definition'>cish_suffixes</span>                <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span> <span class='hs-str'>"c"</span><span class='hs-layout'>,</span> <span class='hs-str'>"cpp"</span><span class='hs-layout'>,</span> <span class='hs-str'>"C"</span><span class='hs-layout'>,</span> <span class='hs-str'>"cc"</span><span class='hs-layout'>,</span> <span class='hs-str'>"cxx"</span><span class='hs-layout'>,</span> <span class='hs-str'>"s"</span><span class='hs-layout'>,</span> <span class='hs-str'>"S"</span> <span class='hs-keyglyph'>]</span>
<a name="line-199"></a><a name="extcoreish_suffixes"></a><span class='hs-definition'>extcoreish_suffixes</span>          <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span> <span class='hs-str'>"hcr"</span> <span class='hs-keyglyph'>]</span>
<a name="line-200"></a><a name="haskellish_user_src_suffixes"></a><span class='hs-comment'>-- Will not be deleted as temp files:</span>
<a name="line-201"></a><span class='hs-definition'>haskellish_user_src_suffixes</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span> <span class='hs-str'>"hs"</span><span class='hs-layout'>,</span> <span class='hs-str'>"lhs"</span><span class='hs-layout'>,</span> <span class='hs-str'>"hs-boot"</span><span class='hs-layout'>,</span> <span class='hs-str'>"lhs-boot"</span> <span class='hs-keyglyph'>]</span>
<a name="line-202"></a>
<a name="line-203"></a><a name="objish_suffixes"></a><span class='hs-definition'>objish_suffixes</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-204"></a><span class='hs-comment'>-- Use the appropriate suffix for the system on which</span>
<a name="line-205"></a><span class='hs-comment'>-- the GHC-compiled code will run</span>
<a name="line-206"></a><span class='hs-cpp'>#if mingw32_TARGET_OS || cygwin32_TARGET_OS</span>
<a name="line-207"></a><span class='hs-definition'>objish_suffixes</span>     <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span> <span class='hs-str'>"o"</span><span class='hs-layout'>,</span> <span class='hs-str'>"O"</span><span class='hs-layout'>,</span> <span class='hs-str'>"obj"</span><span class='hs-layout'>,</span> <span class='hs-str'>"OBJ"</span> <span class='hs-keyglyph'>]</span>
<a name="line-208"></a><span class='hs-cpp'>#else</span>
<a name="line-209"></a><span class='hs-definition'>objish_suffixes</span>     <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span> <span class='hs-str'>"o"</span> <span class='hs-keyglyph'>]</span>
<a name="line-210"></a><span class='hs-cpp'>#endif</span>
<a name="line-211"></a>
<a name="line-212"></a><a name="dynlib_suffixes"></a><span class='hs-definition'>dynlib_suffixes</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-213"></a><span class='hs-cpp'>#ifdef mingw32_TARGET_OS</span>
<a name="line-214"></a><span class='hs-definition'>dynlib_suffixes</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>"dll"</span><span class='hs-layout'>,</span> <span class='hs-str'>"DLL"</span><span class='hs-keyglyph'>]</span>
<a name="line-215"></a><span class='hs-cpp'>#elif defined(darwin_TARGET_OS)</span>
<a name="line-216"></a><span class='hs-definition'>dynlib_suffixes</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>"dylib"</span><span class='hs-keyglyph'>]</span>
<a name="line-217"></a><span class='hs-cpp'>#else</span>
<a name="line-218"></a><span class='hs-definition'>dynlib_suffixes</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>"so"</span><span class='hs-keyglyph'>]</span>
<a name="line-219"></a><span class='hs-cpp'>#endif</span>
<a name="line-220"></a>
<a name="line-221"></a><a name="isHaskellishSuffix"></a><span class='hs-definition'>isHaskellishSuffix</span><span class='hs-layout'>,</span> <span class='hs-varid'>isHaskellSrcSuffix</span><span class='hs-layout'>,</span> <span class='hs-varid'>isCishSuffix</span><span class='hs-layout'>,</span> <span class='hs-varid'>isExtCoreSuffix</span><span class='hs-layout'>,</span>
<a name="line-222"></a>    <span class='hs-varid'>isObjectSuffix</span><span class='hs-layout'>,</span> <span class='hs-varid'>isHaskellUserSrcSuffix</span><span class='hs-layout'>,</span> <span class='hs-varid'>isDynLibSuffix</span>
<a name="line-223"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-224"></a><span class='hs-definition'>isHaskellishSuffix</span>     <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>haskellish_suffixes</span>
<a name="line-225"></a><a name="isHaskellSrcSuffix"></a><span class='hs-definition'>isHaskellSrcSuffix</span>     <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>haskellish_src_suffixes</span>
<a name="line-226"></a><a name="isCishSuffix"></a><span class='hs-definition'>isCishSuffix</span>           <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>cish_suffixes</span>
<a name="line-227"></a><a name="isExtCoreSuffix"></a><span class='hs-definition'>isExtCoreSuffix</span>        <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>extcoreish_suffixes</span>
<a name="line-228"></a><a name="isObjectSuffix"></a><span class='hs-definition'>isObjectSuffix</span>         <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>objish_suffixes</span>
<a name="line-229"></a><a name="isHaskellUserSrcSuffix"></a><span class='hs-definition'>isHaskellUserSrcSuffix</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>haskellish_user_src_suffixes</span>
<a name="line-230"></a><a name="isDynLibSuffix"></a><span class='hs-definition'>isDynLibSuffix</span>         <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`elem`</span> <span class='hs-varid'>dynlib_suffixes</span>
<a name="line-231"></a>
<a name="line-232"></a><a name="isSourceSuffix"></a><span class='hs-definition'>isSourceSuffix</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-233"></a><span class='hs-definition'>isSourceSuffix</span> <span class='hs-varid'>suff</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isHaskellishSuffix</span> <span class='hs-varid'>suff</span> <span class='hs-varop'>||</span> <span class='hs-varid'>isCishSuffix</span> <span class='hs-varid'>suff</span>
<a name="line-234"></a>
<a name="line-235"></a><a name="isHaskellishFilename"></a><span class='hs-definition'>isHaskellishFilename</span><span class='hs-layout'>,</span> <span class='hs-varid'>isHaskellSrcFilename</span><span class='hs-layout'>,</span> <span class='hs-varid'>isCishFilename</span><span class='hs-layout'>,</span>
<a name="line-236"></a>    <span class='hs-varid'>isExtCoreFilename</span><span class='hs-layout'>,</span> <span class='hs-varid'>isObjectFilename</span><span class='hs-layout'>,</span> <span class='hs-varid'>isHaskellUserSrcFilename</span><span class='hs-layout'>,</span>
<a name="line-237"></a>    <span class='hs-varid'>isDynLibFilename</span><span class='hs-layout'>,</span> <span class='hs-varid'>isSourceFilename</span>
<a name="line-238"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-239"></a><span class='hs-comment'>-- takeExtension return .foo, so we drop 1 to get rid of the .</span>
<a name="line-240"></a><span class='hs-definition'>isHaskellishFilename</span>     <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isHaskellishSuffix</span>     <span class='hs-layout'>(</span><span class='hs-varid'>drop</span> <span class='hs-num'>1</span> <span class='hs-varop'>$</span> <span class='hs-varid'>takeExtension</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-241"></a><a name="isHaskellSrcFilename"></a><span class='hs-definition'>isHaskellSrcFilename</span>     <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isHaskellSrcSuffix</span>     <span class='hs-layout'>(</span><span class='hs-varid'>drop</span> <span class='hs-num'>1</span> <span class='hs-varop'>$</span> <span class='hs-varid'>takeExtension</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-242"></a><a name="isCishFilename"></a><span class='hs-definition'>isCishFilename</span>           <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isCishSuffix</span>           <span class='hs-layout'>(</span><span class='hs-varid'>drop</span> <span class='hs-num'>1</span> <span class='hs-varop'>$</span> <span class='hs-varid'>takeExtension</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-243"></a><a name="isExtCoreFilename"></a><span class='hs-definition'>isExtCoreFilename</span>        <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isExtCoreSuffix</span>        <span class='hs-layout'>(</span><span class='hs-varid'>drop</span> <span class='hs-num'>1</span> <span class='hs-varop'>$</span> <span class='hs-varid'>takeExtension</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-244"></a><a name="isObjectFilename"></a><span class='hs-definition'>isObjectFilename</span>         <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isObjectSuffix</span>         <span class='hs-layout'>(</span><span class='hs-varid'>drop</span> <span class='hs-num'>1</span> <span class='hs-varop'>$</span> <span class='hs-varid'>takeExtension</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-245"></a><a name="isHaskellUserSrcFilename"></a><span class='hs-definition'>isHaskellUserSrcFilename</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isHaskellUserSrcSuffix</span> <span class='hs-layout'>(</span><span class='hs-varid'>drop</span> <span class='hs-num'>1</span> <span class='hs-varop'>$</span> <span class='hs-varid'>takeExtension</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-246"></a><a name="isDynLibFilename"></a><span class='hs-definition'>isDynLibFilename</span>         <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isDynLibSuffix</span>         <span class='hs-layout'>(</span><span class='hs-varid'>drop</span> <span class='hs-num'>1</span> <span class='hs-varop'>$</span> <span class='hs-varid'>takeExtension</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-247"></a><a name="isSourceFilename"></a><span class='hs-definition'>isSourceFilename</span>         <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isSourceSuffix</span>         <span class='hs-layout'>(</span><span class='hs-varid'>drop</span> <span class='hs-num'>1</span> <span class='hs-varop'>$</span> <span class='hs-varid'>takeExtension</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-248"></a>
<a name="line-249"></a>
</pre></body>
</html>