1
1
mirror of https://github.com/github/semantic.git synced 2024-12-24 15:35:14 +03:00
semantic/src/Source.hs

29 lines
773 B
Haskell
Raw Normal View History

2015-12-24 06:38:02 +03:00
module Source where
import Range
2015-12-24 06:48:31 +03:00
import qualified Data.Vector as Vector
2015-12-24 06:48:31 +03:00
newtype Source a = Source (Vector.Vector a)
deriving (Eq, Show, Functor, Foldable)
makeSource :: [a] -> Source a
2015-12-24 06:48:31 +03:00
makeSource = Source . Vector.fromList
unSource :: Source a -> [a]
2015-12-24 06:48:31 +03:00
unSource (Source vector) = Vector.toList vector
subsource :: Range -> Source a -> Source a
2015-12-24 06:48:31 +03:00
subsource range (Source vector) = Source (Vector.slice (start range) (end range) vector)
toString :: Source Char -> String
toString = unSource
at :: Source a -> Int -> a
at = (!!) . unSource
null :: Source a -> Bool
null (Source vector) = Vector.null vector
2015-12-24 07:05:01 +03:00
uncons :: Source a -> Maybe (a, Source a)
uncons (Source vector) = if Vector.null vector then Nothing else Just (Vector.head vector, Source $ Vector.tail vector)