Comments (2)
from liquidhaskell-tutorial.
Ok, I figured out how to do it where sparseFromList can return a Just or Nothing and it's still specified in the type signature. But I guess since you'd only ever call sparseFromList
on data received dynamically, it was sort of pointless to make it be able to check at compile time. At least I learned a lot 🙂
data SparseElems a = SENil
| SECons Int a (SparseElems a)
deriving (Eq, Ord, Show)
{-@ measure maxIndex @-}
maxIndex :: SparseElems a -> Int
maxIndex SENil = 0
maxIndex (SECons i _ xs) = let m = maxIndex xs in
if m > i then m else i
{-@ measure minIndex @-}
minIndex :: SparseElems a -> Int
minIndex SENil = 0
minIndex (SECons i _ xs) = let m = minIndex xs in
if m < i then m else i
{-@ sparseElemsToList :: se:SparseElems a -> [({n:Int | n <= maxIndex se && n >= minIndex se}, a)] @-}
sparseElemsToList :: SparseElems a -> [(Int, a)]
sparseElemsToList SENil = []
sparseElemsToList (SECons i a xs) = (i,a):sparseElemsToList xs
{-@ sparseFromList :: d:Nat -> elems:SparseElems a
-> {v:Maybe (SparseN a d) | isJust v <=> (maxIndex elems < d && minIndex elems >= 0) }
@-}
sparseFromList :: Int -> SparseElems a -> Maybe (Sparse a)
sparseFromList dim elts
| maxIndex elts < dim && minIndex elts >= 0= Just $ SP dim (sparseElemsToList elts)
| otherwise = Nothing
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.