{-# LANGUAGE TemplateHaskell #-}
module Language.Drasil.Chunk.NamedIdea (
IdeaDict,
NamedIdea(..), Idea(..),
idea, idea'
) where
import Control.Lens ((^.), makeLenses, Lens')
import Drasil.Database (UID, HasUID(..), declareHasChunkRefs, Generically(..),
IsChunk)
import Language.Drasil.NaturalLanguage.English.NounPhrase.Core (NP)
class IsChunk c => NamedIdea c where
term :: Lens' c NP
class NamedIdea c => Idea c where
getA :: c -> Maybe String
data IdeaDict = IdeaDict {
IdeaDict -> UID
_uu :: UID,
IdeaDict -> NP
_np :: NP,
IdeaDict -> Maybe String
mabbr :: Maybe String
}
declareHasChunkRefs ''IdeaDict
makeLenses ''IdeaDict
instance Eq IdeaDict where IdeaDict
a == :: IdeaDict -> IdeaDict -> Bool
== IdeaDict
b = IdeaDict
a IdeaDict -> Getting UID IdeaDict UID -> UID
forall s a. s -> Getting a s a -> a
^. Getting UID IdeaDict UID
forall c. HasUID c => Getter c UID
Getter IdeaDict UID
uid UID -> UID -> Bool
forall a. Eq a => a -> a -> Bool
== IdeaDict
b IdeaDict -> Getting UID IdeaDict UID -> UID
forall s a. s -> Getting a s a -> a
^. Getting UID IdeaDict UID
forall c. HasUID c => Getter c UID
Getter IdeaDict UID
uid
instance HasUID IdeaDict where uid :: Getter IdeaDict UID
uid = (UID -> f UID) -> IdeaDict -> f IdeaDict
Lens' IdeaDict UID
uu
instance NamedIdea IdeaDict where term :: Lens' IdeaDict NP
term = (NP -> f NP) -> IdeaDict -> f IdeaDict
Lens' IdeaDict NP
np
instance Idea IdeaDict where getA :: IdeaDict -> Maybe String
getA = IdeaDict -> Maybe String
mabbr
idea ::
UID ->
NP ->
String -> IdeaDict
idea :: UID -> NP -> String -> IdeaDict
idea UID
u NP
t String
accAbbr = UID -> NP -> Maybe String -> IdeaDict
IdeaDict UID
u NP
t (String -> Maybe String
forall a. a -> Maybe a
Just String
accAbbr)
idea' ::
UID ->
NP -> IdeaDict
idea' :: UID -> NP -> IdeaDict
idea' UID
u NP
t = UID -> NP -> Maybe String -> IdeaDict
IdeaDict UID
u NP
t Maybe String
forall a. Maybe a
Nothing