Comments (6)
from liquidhaskell-tutorial.
from liquidhaskell-tutorial.
Hi Ranjit, thanks for always replying so promptly! Here's the essential parts of my code. I'm still using my own vector type because I already made it previously when I couldn't get the Haskell Vector to work (which you helped me fix). Maybe my type signatures for Vector related stuff is the problem...
{-@ LIQUID "--no-termination" @-}
{-@ LIQUID "--reflection" @-}
module Blaze.Liquid.Ex5 where
import Prelude hiding (abs, length)
{-@ type Nat = {v:Int | 0 <= v} @-}
{-@ die :: {v:String | false} -> a @-}
die msg = error msg
data Vector a = VNil
| a ::: (Vector a)
deriving (Eq, Ord, Show)
{-@ measure vlen @-}
vlen :: Vector a -> Int
vlen VNil = 0
vlen (_:::v) = 1 + vlen v
{-@ fromList :: xs:[a] -> {v:Vector a | len xs == vlen v} @-}
fromList :: [a] -> Vector a
fromList [] = VNil
fromList (x:xs) = x ::: fromList xs
{-@ type Btwn Lo Hi = {n:Int | Lo <= n && n < Hi } @-}
{-@ (!) :: a:Vector a -> Btwn 0 (vlen a) -> a @-}
(!) :: Vector a -> Int -> a
(!) VNil _ = die "(!): index out of bounds"
(!) (x:::_) 0 = x
(!) (_:::xs) n = xs ! (n - 1)
{-@ loop :: lo:Int -> {hi:Int | hi >= lo} -> a -> (Btwn lo hi -> a -> a) -> a @-}
loop :: Int -> Int -> a -> (Int -> a -> a) -> a
loop lo hi base f = go base lo
where
go acc i
| i < hi = go (f i acc) (i + 1)
| otherwise = acc
{-@ vectorSum' :: {v:Vector Int | vlen v >= 0} -> Int @-}
vectorSum' :: Vector Int -> Int
vectorSum' v = loop 0 (vlen v) 0 f where
f i acc = (v ! i) + acc
And I get the error:
40 | | i < hi = go (f i acc) (i + 1)
^
Inferred type
VV : {v : GHC.Types.Int | v == i}
not a subtype of Required type
VV : {VV : GHC.Types.Int | lo <= VV
&& VV < hi}
In Context
hi : {hi : GHC.Types.Int | hi >= lo}
lo : GHC.Types.Int
i : GHC.Types.Int
from liquidhaskell-tutorial.
Oh, thanks! That html file it generates is really neat. I didn't know about it not inferring for public functions, but maybe you say it in a previous chapter and I missed it. Thanks!
from liquidhaskell-tutorial.
Also, where's the best place to ask general questions about Liquid Haskell?
from liquidhaskell-tutorial.
from liquidhaskell-tutorial.
Related Issues (20)
- Regarding reverse in Ch 8: Sets HOT 2
- How to workaround using Stack for building html HOT 7
- apparent typo in tutorial under "Testing Values: Booleans and Propositions"
- Can't even get started because of build issues HOT 5
- there is an extra ")" at the end of this line
- Numbering the exercises HOT 1
- Question about Chapter 5.3: delmin HOT 2
- Links to subsections don't work for me HOT 2
- Syntax of refinement types HOT 4
- Chapter 8 exercise "reverse" HOT 8
- Instructions for running LiquidHaskell HOT 2
- Figures 1.4 and 1.5 in Chapter 12
- Chapter 12 Exercise InsertRight HOT 4
- Current HEAD of main fails to build HOT 4
- Liquid Type Mismatch on Initial Build HOT 2
- Passing -fdefer-type-errors to GHC causes confusing errors from LH HOT 3
- Text description of "null" in Chapter 6 is reversed HOT 1
- Link is no longer available HOT 1
- Trouble with Chapter 11 HOT 3
- About Lemmas and other questions HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from liquidhaskell-tutorial.