source: sizechecking/branches/macs/Size.hs

Last change on this file was 28, checked in by gobi, 11 years ago

cleanup

File size: 1.7 KB
RevLine 
[25]1{-# LANGUAGE TypeFamilies #-}
2{-# LANGUAGE MultiParamTypeClasses #-}
3{-# LANGUAGE FlexibleInstances #-}
4
[22]5module Size where
6
7import Lambda
8import Ops
9import Data.Supply as S
[27]10import Data.Lens.Light
[22]11
12data Unsized
13
14class (LOps l) => Size l where
15    list :: l Int -> l (Int -> a) -> l [a]
16    slam :: (l Int -> l (Int -> a) -> l b) -> l ([a] -> b)
17    shift :: l (Int -> a) -> l Int -> l (Int -> a) -> l (Int -> a)
18    unsized :: l Unsized
19    bottom :: l a
20
[27]21instance SContext s => Size (S s) where
22    unsized = S $ \_ -> showChar 'U'
23    bottom = S $ \_ -> showChar '┮'
24    list size sexp = S $ \ctx ->
25        let (s1, s2) = S.split2 (getL supply ctx)
26            p = getL prec ctx
[22]27        in showParen (p>0) $
28            showString "List " .
[27]29            unS size (updateCtx s1 9 ctx) .
[22]30            showChar ' ' .
[27]31            unS sexp (updateCtx s2 9 ctx)
32    slam f = S $ \ctx ->
33        let (s1, s2, s3) = S.split3 (getL supply ctx)
[22]34            v1           = S.supplyValue s1
[27]35            showV1       = S $ \_ -> showVar v1
[22]36            v2           = S.supplyValue s2
[27]37            showV2       = S $ \_ -> showVar v2
38            p = getL prec ctx
[22]39        in showParen (p>0) $
40            showChar 'Λ' .
41            showVar v1 .
42            showChar ',' .
43            showVar v2 .
44            showChar '.' .
[27]45            unS (f showV1 showV2) (updateCtx s3 0 ctx)
46    shift e1 ss e2 = S $ \ctx ->
47        let (s1, s2, s3) = S.split3 (getL supply ctx)
48            p = getL prec ctx
[22]49        in showParen (p>0)
50        $ showString "Shift "
[27]51        . unS e1 (updateCtx s1 2 ctx)
[22]52        . showChar ' '
[27]53        . unS ss (updateCtx s2 2 ctx)
[22]54        . showChar ' '
[27]55        . unS e2 (updateCtx s3 2 ctx)
[25]56
Note: See TracBrowser for help on using the repository browser.