CurryInfo: stylechecker-2.0.0 / Check.AST.Indent.Let.checkLet'

definition:
checkLet' :: SpanInfo -> [Decl a] -> Expression a -> Int -> CSM ()
checkLet' si (dcl:dcls) expr i = case si of 
  (SpanInfo
            (Span (Position l1 c1) (Position l2 c2))
            [Span (Position _  cl) _, 
             Span (Position li ci) _]
          ) -> do
    checkExprIndent expr li ci i
    unless (l1 == l2) $
      do
        twoLines (Span (Position l1 c1) (Position l2 c2)) cl ci
        if checkLetDeclarations (getCol (getSpanInfo dcl)) dcls
          then declarationIndent (Span (Position l1 c1) (Position l2 c2)) dcl i
          else report (Message
                        (Span (Position l1 c1) (Position l2 c2))
                        ( colorizeKey "let"
                          <+> text "declarations not aligned"
                        )
                        ( text "align"
                          <+> colorizeKey "let"
                          <+> text "declarations")
                      )
  _ -> return ()
checkLet' _ [] _ _ = return ()
demand:
argument 2
deterministic:
deterministic operation
documentation:
-- Checks indention of in expression first,
-- then checks if 
--  (a) `let` and `in` are in one line.
--  (b) they are aligned (indented) properly and the `let` declarations are aligned.
failfree:
<FAILING>
indeterministic:
referentially transparent operation
infix:
no fixity defined
iotype:
{({SpanInfo},{:},_,_) |-> _ || ({NoSpanInfo},{:},_,_) |-> _ || (_,{[]},_,_) |-> _}
name:
checkLet'
precedence:
no precedence defined
result-values:
_
signature:
Curry.SpanInfo.SpanInfo -> [Curry.Types.Decl a] -> Curry.Types.Expression a
-> Prelude.Int
-> Control.Monad.Trans.State.StateT Types.CheckState Data.Functor.Identity.Identity ()
solution-complete:
operation might suspend on free variables
terminating:
possibly non-terminating
totally-defined:
possibly non-reducible on same data term