{-# OPTIONS -Wall #-} module Language.Haskell.HBB.Internal.InterfaceTypes ( NonFirstLinesIndenting(..) ) where -- | Instances of this data type control whether the non-first lines of a -- binding in mode /inline/ or /smart-inline/ should get some extra indentation -- to match the environment of the place where the binding should be written -- to. -- -- Assumed that the following call to /factorial/ should get inlined: -- -- @ -- result = factorial 3 -- @ -- -- The function /factorial/ looks this way: -- -- @ -- factorial 1 = 1 -- factorial x = x * factorial (x-1) -- @ -- -- The lambda function that is produced in mode /inline/ with /IgnoreIndOfTargetEnv/ -- looks as follows: -- -- @ -- (\x -> case x of 1 -> 1 -- y -> y * factorial (y - 1)) -- @ -- -- The lambda function produced in mode /inline/ with /AdaptIndToTargetEnv/ -- looks as follows: -- -- @ -- (\x -> case x of 1 -> 1 -- y -> y * factorial (y - 1)) -- @ data NonFirstLinesIndenting = AdaptIndToTargetEnv -- ^ Increase indentation of non-first lines -- by the column number the inlined version of the -- the function starts at (short: adapt indentation -- to caller environment) | IgnoreIndOfTargetEnv -- ^ Preserve indentation which means don't adapt -- the indentation to the environment of the caller.