Skip to content

Commit e79465f

Browse files
committed
sc
1 parent 7424b54 commit e79465f

File tree

3 files changed

+26
-11
lines changed

3 files changed

+26
-11
lines changed

app/Main.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
module Main where
22

33
import Lib
4+
import qualified SComplex as SC
5+
6+
square = SC.fromList [[1,2,3], [2,3,4]]
7+
faces = SC.faces square 2
48

59
main :: IO ()
6-
main = someFunc
10+
main = putStrLn $ show faces

package.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ name: DiscreteDifferentialGeometry
22
version: 0.1.0.0
33
github: "githubuser/DiscreteDifferentialGeometry"
44
license: BSD3
5-
author: "Author name here"
6-
maintainer: "example@example.com"
5+
author: "Jarred Barber"
6+
maintainer: "jpb5082@gmail.com"
77
copyright: "2020 Author name here"
88

99
extra-source-files:
@@ -21,6 +21,7 @@ description: Please see the README on GitHub at <https://github.com/gith
2121

2222
dependencies:
2323
- base >= 4.7 && < 5
24+
- containers
2425

2526
library:
2627
source-dirs: src

src/SComplex.hs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{-# LANGUAGE TypeSynonymInstances #-}
2-
module SComplex where
2+
module SComplex (Simplex, SComplex, boundary, empty, insert, fromList, union, faces, star)
3+
where
34

45
import qualified Data.Map.Strict as Map
56
import qualified Data.Set as Set
@@ -35,23 +36,32 @@ iterateBoundary s =
3536
b ++ (>>=) b iterateBoundary
3637

3738
-- A simplical complex is a collection of simplices, plus all of their boundaries
38-
data SimplicalComplex a = SimplicalComplex { parents::Map.Map (Simplex a) (Set.Set (Simplex a)) }
39+
data SComplex a = SComplex { parents::Map.Map (Simplex a) (Set.Set (Simplex a)) }
3940
deriving (Show)
4041

41-
empty = SimplicalComplex {parents=Map.empty}
42+
empty = SComplex { parents=Map.empty }
4243

43-
insert :: (Ord a) => Simplex a -> SimplicalComplex a -> SimplicalComplex a
44+
insert :: (Ord a) => Simplex a -> SComplex a -> SComplex a
4445
insert [] sc = sc
4546
insert s sc =
4647
let b = boundary s
47-
sc' = foldl (\x y -> insert y x) sc b
48+
sc' = foldl (flip insert) sc b
4849
inserter m k =
4950
Map.insertWith Set.union k (Set.singleton s) m
5051
in
5152
-- sc' has all of the children of s inserted properly.
5253
-- Now, let's link up the direct children with s
53-
SimplicalComplex { parents=Map.insert s Set.empty $ foldl inserter (parents sc') b}
54+
SComplex { parents=Map.insert s Set.empty $ foldl inserter (parents sc') b }
5455

55-
fromList :: (Ord a) => [Simplex a] -> SimplicalComplex a
56-
fromList = foldl (\x y -> insert y x) $ empty
56+
fromList :: (Ord a, Foldable t) => t (Simplex a) -> SComplex a
57+
fromList = foldl (flip insert) empty
5758

59+
union :: (Ord a) => SComplex a -> SComplex a -> SComplex a
60+
union sc1 sc2 =
61+
foldl (flip insert) sc1 (Map.keys $ parents sc2)
62+
63+
faces :: SComplex a -> Int -> [Simplex a]
64+
faces sc o = filter ((==) o . length) $ Map.keys . parents $ sc
65+
66+
star :: (Ord a) => SComplex a -> Simplex a -> Maybe [Simplex a]
67+
star sc s = fmap Set.toList $ Map.lookup s $ parents sc

0 commit comments

Comments
 (0)