~ubuntu-branches/ubuntu/wily/agda/wily-proposed

« back to all changes in this revision

Viewing changes to src/full/Agda/TypeChecking/SizedTypes.hs

  • Committer: Package Import Robot
  • Author(s): Iain Lane, d5cf60f
  • Date: 2015-05-20 13:08:33 UTC
  • mfrom: (1.1.7)
  • Revision ID: package-import@ubuntu.com-20150520130833-cdcmhagwsouna237
Tags: 2.4.2.2-2
[d5cf60f] Depend on ${shlibs:Depends}, to get libc (& maybe other) deps

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
{-# LANGUAGE CPP #-}
 
1
{-# LANGUAGE CPP           #-}
2
2
{-# LANGUAGE PatternGuards #-}
3
3
 
4
4
module Agda.TypeChecking.SizedTypes where
5
5
 
6
 
import Control.Monad.Error
7
 
 
8
6
import Data.Function
9
7
import Data.List
10
8
import qualified Data.Map as Map
24
22
import {-# SOURCE #-} Agda.TypeChecking.Conversion
25
23
import {-# SOURCE #-} Agda.TypeChecking.Constraints
26
24
 
27
 
import qualified Agda.Utils.Warshall as W
 
25
import Agda.Utils.Except ( MonadError(catchError, throwError) )
28
26
import Agda.Utils.List
29
27
import Agda.Utils.Maybe
30
28
import Agda.Utils.Monad
31
29
import Agda.Utils.Size
32
30
import Agda.Utils.Tuple
33
31
 
34
 
#include "../undefined.h"
 
32
import qualified Agda.Utils.Warshall as W
 
33
 
 
34
#include "undefined.h"
35
35
import Agda.Utils.Impossible
36
36
 
37
37
------------------------------------------------------------------------
358
358
        (b, m) <- sizeExpr v
359
359
        return $ Just $ Leq a (m - n) b
360
360
      `catchError` \ err -> case err of
361
 
        PatternErr _ -> return Nothing
 
361
        PatternErr{} -> return Nothing
362
362
        _            -> throwError err
363
363
    _ -> __IMPOSSIBLE__
364
364
 
506
506
                term (W.SizeVar j n) | j < ar = plus (var $ ar - j - 1) n
507
507
                term _                        = __IMPOSSIBLE__
508
508
 
509
 
                lam _ v = Lam defaultArgInfo $ Abs "s" v -- hiding does not matter
510
 
 
511
 
                -- convert size expression to term and abstract
512
 
                v = flip (foldr lam) [0..ar-1] $ term e
 
509
                tel = replicate ar $ defaultArg "s"
 
510
                -- convert size expression to term
 
511
                v = term e
513
512
 
514
513
            reportSDoc "tc.size.solve" 20 $ sep
515
514
              [ text (show m) <+> text ":="
520
519
            let isInf (W.SizeConst W.Infinite) = True
521
520
                isInf _                        = False
522
521
            unlessM ((isJust <$> isInteractionMeta m) `and2M` return (isInf e)) $
523
 
              assignTerm m v
 
522
              assignTerm m tel v
524
523
 
525
524
      mapM_ inst $ Map.toList sol
526
525
      return True