packages feed

liquidhaskell-0.4.0.0: tests/neg/prune0.hs

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Prune where

import Prelude hiding (read, length)
import Control.Monad.Primitive
import Data.Vector.Generic.Mutable

----------------------------------------------------------------------------
-- LIQUID Specifications ---------------------------------------------------
----------------------------------------------------------------------------

-- | Vector Size Measure

{-@ measure vsize :: forall a. a -> Int @-}

-- | Vector Type Aliases
{-@ type      OkIdx X     = {v:Nat | v < (vsize X)} @-}

-- | Assumed Types for Vector

{-@ unsafeRead  
      :: (PrimMonad m, MVector v a) 
      => xorp:(v (PrimState m) a) 
      -> (OkIdx xorp) 
      -> m a       
  @-}

yuck xanadu i = if (i > 0) then unsafeRead xanadu i else undefined