{-# language DeriveFunctor, DeriveFoldable, DeriveTraversable, DeriveGeneric #-} {-# language InstanceSigs, ScopedTypeVariables, TypeApplications #-} {-# language TemplateHaskell #-} {-| Module : Language.Python.Syntax.Comment Copyright : (C) CSIRO 2017-2019 License : BSD3 Maintainer : Isaac Elliott <isaace71295@gmail.com> Stability : experimental Portability : non-portable -} module Language.Python.Syntax.Comment where import Control.Lens.Lens (Lens') import Data.Generics.Product.Typed (typed) import Data.Deriving (deriveEq1, deriveOrd1) import GHC.Generics (Generic) import Language.Python.Syntax.Ann -- | A Python single-line comment, such as on the following line: -- -- @ -- y = x + 4 # add four to the value of x -- @ -- -- In this case, the structure parsed would be -- -- @ -- MkComment () " add four to the value of x" -- @ -- -- with the hash being inferred, and the space after the hash being preserved. -- -- Python does not have multi-line comments. There is a common convention of -- using a multi-line string expression as a multi-line comment, since a -- string expression is a no-op statement. Such multi-line comments are -- __NOT__ represented with this data type, but rather as normal -- string expressions (since that's what they are). data Comment a = MkComment { _commentAnn :: Ann a , _commentValue :: String } deriving (Eq, Ord, Show, Functor, Foldable, Traversable, Generic) instance HasAnn Comment where annot :: forall a. Lens' (Comment a) (Ann a) annot = typed @(Ann a) deriveEq1 ''Comment deriveOrd1 ''Comment