1
1
mirror of https://github.com/github/semantic.git synced 2024-11-24 00:42:33 +03:00

Stub diffSummary'

This commit is contained in:
joshvera 2016-05-03 15:50:38 -04:00
parent 9f8fc439b3
commit 1914950bc1
3 changed files with 26 additions and 7 deletions

View File

@ -63,6 +63,7 @@ library
, vector
, recursion-schemes
, free
, comonad
default-language: Haskell2010
default-extensions: DeriveFunctor, DeriveFoldable, DeriveTraversable, DeriveGeneric, OverloadedStrings
ghc-options: -Wall -fno-warn-name-shadowing -O2 -threaded -fprof-auto "-with-rtsopts=-N -p -s -h -i0.1" -j

View File

@ -1,7 +1,9 @@
{-# LANGUAGE TypeFamilies, TypeSynonymInstances, FlexibleInstances #-}
module Diff where
import Control.Comonad.Trans.Cofree
import Control.Monad.Free
import Control.Monad.Trans.Free
import Data.Functor.Foldable as Foldable
import Data.Functor.Both
import Patch
import Syntax
@ -20,9 +22,13 @@ annotate :: annotation -> Syntax a f -> CofreeF (Syntax a) annotation f
annotate = (:<)
-- | An annotated series of patches of terms.
type DiffF a annotation = FreeF (CofreeF (Syntax a) (Both annotation)) (Patch (Term a annotation))
type Diff a annotation = Free (CofreeF (Syntax a) (Both annotation)) (Patch (Term a annotation))
type instance Base (Diff a annotation) = DiffF a annotation
type instance Base (Free f a) = FreeF f a
instance (Functor f) => Foldable.Foldable (Free f a) where project = runFree
-- | Sum the result of a transform applied to all the patches in the diff.
diffSum :: (Patch (Term a annotation) -> Integer) -> Diff a annotation -> Integer
diffSum patchCost diff = sum $ fmap patchCost diff

View File

@ -8,12 +8,16 @@ import Term
import Syntax
import qualified Data.Text as T
import qualified Category
import Data.Functor.Both
import Data.Monoid
import Data.Maybe (listToMaybe)
import Data.Set (toList)
import Control.Arrow
import Control.Monad
import Control.Comonad
import Control.Comonad.Trans.Cofree
import Control.Monad.Trans.Free
import qualified Control.Comonad.Cofree as Cofree
import Data.Functor.Foldable as Foldable
@ -30,11 +34,19 @@ patchSummary termSummary patch = memptyOrDiff (before patch) <> memptyOrDiff (af
where
memptyOrDiff = maybe emptyDiffSummary termSummary
diffSummary :: Diff a Info -> DiffSummary
diffSummary = histo diffSummary' where
diffSummary' :: DiffF a (Cofree (DiffF a Info) DiffSummary) f -> DiffSummary
diffSummary' (coDiffSummary :< Leaf _) = diffSummary
where (diffSummary :< _) = runCofree coDiffSummary
type DiffSummaryF leaf annotation = FreeF (CofreeF (Syntax leaf) (Both annotation))
diffSummary :: Diff leaf Info -> DiffSummary
-- histo :: Foldable t => (Base t (Cofree (Base t) a) -> a) -> t -> a
diffSummary = histo diffSummary' . fmap (patchSummary undefined) where
--diffSummary' :: DiffF leaf (Cofree.Cofree (DiffF leaf Info) DiffSummary) f -> DiffSummary
-- Skip any child that doesn't have any changes (that will always include leaves)
-- Skip any child that doesn't have any changes (that will always include leaves)
diffSummary' :: DiffSummaryF leaf annotation DiffSummary (Cofree.Cofree (DiffSummaryF leaf annotation DiffSummary) DiffSummary) -> DiffSummary
diffSummary' (Free (_ :< Leaf _)) = undefined
diffSummary' (Free (_ :< Indexed children)) = DiffSummary { diffChanges = children >>= diffChanges . extract }
diffSummary' (Free (_ :< Fixed children)) = undefined
diffSummary' (Free (_ :< Keyed children)) = undefined
diffSummary' (Pure diffSummary) = diffSummary :: DiffSummary
-- (patchSummary termSummary)
-- Syntax Text DiffSummary -> DiffSummary Text