packages feed

liquidhaskell-0.8.0.2: tests/todo/splash-vector.hs

{-# LANGUAGE OverloadedStrings #-}
module SplashVector where

import Prelude hiding (length)
import Data.Vector (Vector, (!), length)
-- import qualified Data.Vector            as V
import qualified Data.ByteString        as B
import qualified Data.ByteString.Unsafe as B

vectorSum :: (Num a) => Vector a -> a
dotProduct :: (Num a) => Vector a -> Vector a -> a

-- vectorSum  :: `[0 .. n] ` with `[0 .. n - 1]`
-- dotProduct :: (Num a) => x:Vector a -> {y:Vector a | vlen y = vlen x} -> a
-- type VectorN a N = {v:Vector a | vlen v == N}
-- dotProduct :: (Num a) => x:Vector a -> VectorN a {vlen x} -> a



{-@ vectorSum :: (Num a) => Vector a -> a @-}
vectorSum x = sum [ x ! i | i <- [ 0 .. n - 1 ]]
  where
    n       = length x


{-@ type VectorN a N = {v:Vector a | vlen v == N} @-}

{- type VectorX a X = {v:Vector a | vlen v == vlen X} -}

{-@ type VectorEq a X = {v:Vector a | vlen v == vlen X} @-}

{-@ dotProduct :: (Num a) => x:Vector a -> VectorEq a x -> a @-}
dotProduct x y = sum [ (x ! i) * (y ! i) | i <- [0 .. n - 1]]
  where
    n          = length x






-- 60
-- 6
-- 16
-- 14


liquid :: B.ByteString
liquid = B.unsafeTake 14 (pack "LiquidHaskell  ")



{-@ assume pack :: s:String -> {v:B.ByteString | bslen v == len s} @-}
pack :: String -> B.ByteString
pack = undefined

{-@ foo :: n:Int -> [{v:Nat | v <= n}] @-}
foo :: Int -> [Int]
foo n = [0 .. n]

{-@ assume GHC.Enum.enumFromTo :: (Enum a) => lo:a -> hi:a -> [{v:a | lo <= v && v <= hi}] @-}

{-@ assume B.unsafeTake
    :: n : Nat
    -> { i : B.ByteString | n <= bslen i }
    -> { o : B.ByteString | bslen o == n }
  @-}













--------------------------------------------------------------------------------