From be8ed14d609eae96444706bf9a52d2a0f1050cff Mon Sep 17 00:00:00 2001 From: Maryyam Date: Thu, 14 Jun 2018 16:57:30 -0400 Subject: [PATCH] Created isLabel and HasLabel classes (#643) * created isLabel and HasLabel classes * moved newly created classes to Classes file; created new file to avoid cyclic imports * Renamed some files as suggested --- code/Language/Drasil/Classes.hs | 10 ++++++++++ code/Language/Drasil/Label.hs | 15 +-------------- code/Language/Drasil/Label/Core.hs | 15 +++++++++++++++ code/drasil.cabal | 1 + 4 files changed, 27 insertions(+), 14 deletions(-) create mode 100644 code/Language/Drasil/Label/Core.hs diff --git a/code/Language/Drasil/Classes.hs b/code/Language/Drasil/Classes.hs index 65db83ef3c..7b67b7b98a 100644 --- a/code/Language/Drasil/Classes.hs +++ b/code/Language/Drasil/Classes.hs @@ -11,6 +11,8 @@ module Language.Drasil.Classes ( , HasSpace(typ) , HasUnitSymbol(usymb) , IsUnit + , HasLabel(getLabel) + , IsLabel , UnitEq(uniteq) , HasReference(getReferences) , CommonIdea(abrv) @@ -27,6 +29,7 @@ import Language.Drasil.Space (Space) import Language.Drasil.UnitLang (USymb, UDefn) import Language.Drasil.Chunk.References (References) import Language.Drasil.UID (UID) +import Language.Drasil.Label.Core (Label) import Language.Drasil.Chunk.Constrained.Core (Constraint) import Language.Drasil.Expr (Expr) import Language.Drasil.Chunk.Derivation @@ -94,6 +97,13 @@ class Constrained c where class HasReasVal c where reasVal :: Lens' c (Maybe Expr) +-- | For those things which "have a label" +class HasLabel c where + getLabel :: Lens' c Label + +-- IsLabel is associated with String rendering +class (HasLabel u, HasUID u) => IsLabel u where + ----------------------------------------------------- -- Below are for units only -- | Some chunks store a unit symbol diff --git a/code/Language/Drasil/Label.hs b/code/Language/Drasil/Label.hs index c177101a60..7c665ed178 100644 --- a/code/Language/Drasil/Label.hs +++ b/code/Language/Drasil/Label.hs @@ -1,21 +1,9 @@ -{-# Language TemplateHaskell #-} module Language.Drasil.Label (Label) where -import Control.Lens (makeLenses) -import Language.Drasil.UID (UID) +import Language.Drasil.Label.Core import Language.Drasil.Classes (HasUID(uid)) import Data.Char (isAscii) --- import reference address from Language.Drasil.References? -data LblType = RefAdd String | MetaLink String | URI String - --- Used for referencing; has to be pure ASCII -data Label = Lbl - { _uniqueID :: UID --internal, unique - , lblType :: LblType - } -makeLenses ''Label - instance HasUID Label where uid = uniqueID -- multiple mkLabel constructors for label creation @@ -29,6 +17,5 @@ mkLabelML id ref = Lbl id (MetaLink $ ensureASCII ref) mkLabelURI :: String -> String -> Label mkLabelURI id ref = Lbl id (URI $ ensureASCII ref) --- helpers ensureASCII :: String -> String ensureASCII s = map (\y -> if isAscii y then y else error "Label needs to be pure ASCII.") s \ No newline at end of file diff --git a/code/Language/Drasil/Label/Core.hs b/code/Language/Drasil/Label/Core.hs new file mode 100644 index 0000000000..29154b5a94 --- /dev/null +++ b/code/Language/Drasil/Label/Core.hs @@ -0,0 +1,15 @@ +{-# Language TemplateHaskell #-} +module Language.Drasil.Label.Core where + +import Control.Lens (makeLenses) +import Language.Drasil.UID (UID) + +-- import reference address from Language.Drasil.References? +data LblType = RefAdd String | MetaLink String | URI String + +-- Used for referencing; has to be pure ASCII +data Label = Lbl + { _uniqueID :: UID --internal, unique + , lblType :: LblType + } +makeLenses ''Label \ No newline at end of file diff --git a/code/drasil.cabal b/code/drasil.cabal index 86db516ba4..fc8284382f 100644 --- a/code/drasil.cabal +++ b/code/drasil.cabal @@ -41,6 +41,7 @@ library , Language.Drasil.Expr.Math , Language.Drasil.Expr.Precedence , Language.Drasil.Classes + , Language.Drasil.Label.Core , Language.Drasil.Label , Language.Drasil.Config , Language.Drasil.Document