1
1
mirror of https://github.com/github/semantic.git synced 2024-12-22 14:21:31 +03:00

Define our own State type.

This commit is contained in:
Rob Rix 2017-03-09 14:21:59 -05:00
parent 69a1199268
commit b81959ac72

View File

@ -4,13 +4,17 @@ module SES.Myers where
import Control.Monad.Free.Freer import Control.Monad.Free.Freer
import Data.These import Data.These
import qualified Data.Vector as Vector import qualified Data.Vector as Vector
import Prologue hiding (for) import Prologue hiding (for, State)
data MyersF a where data MyersF a where
SES :: [a] -> [a] -> MyersF [These a a] SES :: [a] -> [a] -> MyersF [These a a]
MiddleSnake :: Vector.Vector a -> Vector.Vector a -> MyersF (Snake, EditDistance) MiddleSnake :: Vector.Vector a -> Vector.Vector a -> MyersF (Snake, EditDistance)
FindDPath :: Direction -> EditDistance -> Diagonal -> MyersF Endpoint FindDPath :: Direction -> EditDistance -> Diagonal -> MyersF Endpoint
data State s a where
Get :: State s s
Put :: s -> State s ()
data For a where data For a where
For :: [a] -> For a For :: [a] -> For a
Continue :: For a Continue :: For a
@ -98,5 +102,5 @@ inInterval k (lower, upper) = k >= lower && k <= upper
-- Instances -- Instances
instance MonadState MyersState Myers where instance MonadState MyersState Myers where
get = S get `Then` return get = S Get `Then` return
put a = S (put a) `Then` return put a = S (Put a) `Then` return