Skip to content

Commit 8c550df

Browse files
Merge pull request #2430 from ucsd-progsys/fd/no-ghc-internal
Eliminate explicit dependency on ghc-internal
2 parents 46d524d + cd819b1 commit 8c550df

21 files changed

+231
-283
lines changed

liquidhaskell.cabal

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,6 @@ library
5555
GHC.ForeignPtr_LHAssumptions
5656
GHC.Int_LHAssumptions
5757
GHC.IO.Handle_LHAssumptions
58-
GHC.Internal.Base_LHAssumptions
59-
GHC.Internal.Data.Foldable_LHAssumptions
60-
GHC.Internal.Data.Maybe_LHAssumptions
61-
GHC.Internal.Float_LHAssumptions
62-
GHC.Internal.Int_LHAssumptions
63-
GHC.Internal.List_LHAssumptions
64-
GHC.Internal.Num_LHAssumptions
65-
GHC.Internal.Word_LHAssumptions
6658
GHC.List_LHAssumptions
6759
GHC.Num_LHAssumptions
6860
GHC.Num.Integer_LHAssumptions
@@ -89,8 +81,6 @@ library
8981
liquidhaskell-boot == 0.9.10.1,
9082
bytestring == 0.12.1.0,
9183
containers == 0.7,
92-
ghc-bignum,
93-
ghc-internal,
9484
ghc-prim
9585
default-language: Haskell98
9686
ghc-options: -Wall

src/Data/Foldable_LHAssumptions.hs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
{-# OPTIONS_GHC -fplugin=LiquidHaskellBoot #-}
2+
{-# OPTIONS_GHC -Wno-unused-imports #-}
23
module Data.Foldable_LHAssumptions where
34

4-
import GHC.Internal.Data.Foldable_LHAssumptions()
5+
import Data.Foldable
6+
import GHC.Types_LHAssumptions()
7+
import Prelude hiding (length, null)
8+
9+
{-@
10+
assume length :: Foldable f => forall a. xs:f a -> {v:Nat | v = len xs}
11+
assume null :: Foldable f => forall a. v:(f a) -> {b:Bool | (b <=> len v = 0) && (not b <=> len v > 0)}
12+
@-}

src/Data/List_LHAssumptions.hs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
{-# OPTIONS_GHC -fplugin=LiquidHaskellBoot #-}
22
module Data.List_LHAssumptions where
33

4-
import GHC.Internal.List_LHAssumptions()
4+
-- TODO: For some reason, the specifications of GHC.List have
5+
-- a role when verifying functions from Data.List. e.g
6+
-- basic/pos/AssmReflFilter.hs
7+
--
8+
-- Needs to be investigated.
9+
import GHC.List_LHAssumptions()

src/Data/Maybe_LHAssumptions.hs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,20 @@
22
{-# OPTIONS_GHC -Wno-unused-imports #-}
33
module Data.Maybe_LHAssumptions where
44

5-
import GHC.Internal.Data.Maybe_LHAssumptions
5+
import Data.Maybe
6+
import GHC.Types_LHAssumptions ()
7+
8+
{-@
9+
assume maybe :: v:b -> (a -> b) -> u:(Maybe a) -> {w:b | not (isJust u) => w == v}
10+
assume isNothing :: v:(Maybe a) -> {b:Bool | not (isJust v) == b}
11+
assume fromMaybe :: v:a -> u:(Maybe a) -> {x:a | not (isJust u) => x == v}
12+
13+
assume isJust :: v:(Maybe a) -> {b:Bool | b == isJust v}
14+
measure isJust :: Maybe a -> Bool
15+
isJust (Just x) = true
16+
isJust (Nothing) = false
17+
18+
assume fromJust :: {v:(Maybe a) | isJust v} -> a
19+
measure fromJust :: Maybe a -> a
20+
fromJust (Just x) = x
21+
@-}

src/Data/Word_LHAssumptions.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{-# OPTIONS_GHC -fplugin=LiquidHaskellBoot #-}
22
module Data.Word_LHAssumptions where
33

4-
import GHC.Internal.Word_LHAssumptions()
4+
import GHC.Word_LHAssumptions()

src/GHC/Base_LHAssumptions.hs

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,55 @@
11
{-# OPTIONS_GHC -fplugin=LiquidHaskellBoot #-}
2+
{-# OPTIONS_GHC -Wno-unused-imports #-}
23
module GHC.Base_LHAssumptions where
34

4-
import GHC.Internal.Base_LHAssumptions()
5+
import GHC.Base (assert)
6+
import GHC.CString_LHAssumptions()
7+
import GHC.Exts_LHAssumptions()
8+
import GHC.Types_LHAssumptions()
9+
import Data.Tuple_LHAssumptions()
10+
11+
{-@
12+
13+
assume . :: forall <p :: b -> c -> Bool, q :: a -> b -> Bool, r :: a -> c -> Bool>.
14+
{xcmp::a, wcmp::b<q xcmp> |- c<p wcmp> <: c<r xcmp>}
15+
(ycmp:b -> c<p ycmp>)
16+
-> (zcmp:a -> b<q zcmp>)
17+
-> xcmp:a -> c<r xcmp>
18+
19+
measure autolen :: forall a. a -> Int
20+
21+
// Useless as compiled into GHC primitive, which is ignored
22+
assume assert :: {v:Bool | v } -> a -> a
23+
24+
instance measure len :: forall a. [a] -> Int
25+
len [] = 0
26+
len (y:ys) = 1 + len ys
27+
28+
invariant {v: [a] | len v >= 0 }
29+
assume map :: (a -> b) -> xs:[a] -> {v: [b] | len v == len xs}
30+
assume ++ :: xs:[a] -> ys:[a] -> {v:[a] | len v == len xs + len ys}
31+
32+
assume $ :: (a -> b) -> a -> b
33+
assume id :: x:a -> {v:a | v = x}
34+
35+
qualif IsEmp(v:Bool, xs: [a]) : (v <=> (len xs > 0))
36+
qualif IsEmp(v:Bool, xs: [a]) : (v <=> (len xs = 0))
37+
38+
qualif ListZ(v: [a]) : (len v = 0)
39+
qualif ListZ(v: [a]) : (len v >= 0)
40+
qualif ListZ(v: [a]) : (len v > 0)
41+
42+
qualif CmpLen(v:[a], xs:[b]) : (len v = len xs )
43+
qualif CmpLen(v:[a], xs:[b]) : (len v >= len xs )
44+
qualif CmpLen(v:[a], xs:[b]) : (len v > len xs )
45+
qualif CmpLen(v:[a], xs:[b]) : (len v <= len xs )
46+
qualif CmpLen(v:[a], xs:[b]) : (len v < len xs )
47+
48+
qualif EqLen(v:int, xs: [a]) : (v = len xs )
49+
qualif LenEq(v:[a], x: int) : (x = len v )
50+
51+
qualif LenDiff(v:[a], x:int) : (len v = x + 1)
52+
qualif LenDiff(v:[a], x:int) : (len v = x - 1)
53+
qualif LenAcc(v:int, xs:[a], n: int): (v = len xs + n)
54+
55+
@-}

src/GHC/Float_LHAssumptions.hs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,31 @@
11
{-# OPTIONS_GHC -fplugin=LiquidHaskellBoot #-}
22
{-# OPTIONS_GHC -Wno-unused-imports #-}
3-
module GHC.Float_LHAssumptions where
3+
module GHC.Float_LHAssumptions(Floating(..)) where
44

5-
import GHC.Internal.Float_LHAssumptions
5+
import GHC.Float
6+
7+
{-@
8+
class Fractional a => Floating a where
9+
pi :: a
10+
exp :: a -> {y:a | y > 0}
11+
log :: {x:a | x > 0} -> a
12+
sqrt :: {x:a | x >= 0} -> {y:a | y >= 0}
13+
(**) :: x:a -> {y:a | x = 0 => y >= 0} -> a
14+
logBase :: {b:a | b > 0 && b /= 1} -> {x:a | x > 0} -> a
15+
sin :: a -> {y:a | -1 <= y && y <= 1}
16+
cos :: a -> {y:a | -1 <= y && y <= 1}
17+
tan :: a -> a
18+
asin :: {x:a | -1 <= x && x <= 1} -> a
19+
acos :: {x:a | -1 <= x && x <= 1} -> a
20+
atan :: a -> a
21+
sinh :: a -> a
22+
cosh :: a -> {y:a | y >= 1}
23+
tanh :: a -> {y:a | -1 < y && y < 1}
24+
asinh :: a -> a
25+
acosh :: {y:a | y >= 1} -> a
26+
atanh :: {y:a | -1 < y && y < 1} -> a
27+
log1p :: a -> a
28+
expm1 :: a -> a
29+
log1pexp :: a -> a
30+
log1mexp :: a -> a
31+
@-}

src/GHC/Internal/Base_LHAssumptions.hs

Lines changed: 0 additions & 55 deletions
This file was deleted.

src/GHC/Internal/Data/Foldable_LHAssumptions.hs

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/GHC/Internal/Data/Maybe_LHAssumptions.hs

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)