{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.ComprehendMedical.Types.SNOMEDCTEntity
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.ComprehendMedical.Types.SNOMEDCTEntity where

import Amazonka.ComprehendMedical.Types.SNOMEDCTAttribute
import Amazonka.ComprehendMedical.Types.SNOMEDCTConcept
import Amazonka.ComprehendMedical.Types.SNOMEDCTEntityCategory
import Amazonka.ComprehendMedical.Types.SNOMEDCTEntityType
import Amazonka.ComprehendMedical.Types.SNOMEDCTTrait
import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude

-- | The collection of medical entities extracted from the input text and
-- their associated information. For each entity, the response provides the
-- entity text, the entity category, where the entity text begins and ends,
-- and the level of confidence that Comprehend Medical has in the detection
-- and analysis. Attributes and traits of the entity are also returned.
--
-- /See:/ 'newSNOMEDCTEntity' smart constructor.
data SNOMEDCTEntity = SNOMEDCTEntity'
  { -- | An extracted segment of the text that is an attribute of an entity, or
    -- otherwise related to an entity, such as the dosage of a medication
    -- taken.
    SNOMEDCTEntity -> Maybe [SNOMEDCTAttribute]
attributes :: Prelude.Maybe [SNOMEDCTAttribute],
    -- | The 0-based character offset in the input text that shows where the
    -- entity begins. The offset returns the UTF-8 code point in the string.
    SNOMEDCTEntity -> Maybe Int
beginOffset :: Prelude.Maybe Prelude.Int,
    -- | The category of the detected entity. Possible categories are
    -- MEDICAL_CONDITION, ANATOMY, or TEST_TREATMENT_PROCEDURE.
    SNOMEDCTEntity -> Maybe SNOMEDCTEntityCategory
category :: Prelude.Maybe SNOMEDCTEntityCategory,
    -- | The 0-based character offset in the input text that shows where the
    -- entity ends. The offset returns the UTF-8 code point in the string.
    SNOMEDCTEntity -> Maybe Int
endOffset :: Prelude.Maybe Prelude.Int,
    -- | The numeric identifier for the entity. This is a monotonically
    -- increasing id unique within this response rather than a global unique
    -- identifier.
    SNOMEDCTEntity -> Maybe Int
id :: Prelude.Maybe Prelude.Int,
    -- | The SNOMED concepts that the entity could refer to, along with a score
    -- indicating the likelihood of the match.
    SNOMEDCTEntity -> Maybe [SNOMEDCTConcept]
sNOMEDCTConcepts :: Prelude.Maybe [SNOMEDCTConcept],
    -- | The level of confidence that Comprehend Medical has in the accuracy of
    -- the detected entity.
    SNOMEDCTEntity -> Maybe Double
score :: Prelude.Maybe Prelude.Double,
    -- | The segment of input text extracted as this entity.
    SNOMEDCTEntity -> Maybe Text
text :: Prelude.Maybe Prelude.Text,
    -- | Contextual information for the entity.
    SNOMEDCTEntity -> Maybe [SNOMEDCTTrait]
traits :: Prelude.Maybe [SNOMEDCTTrait],
    -- | Describes the specific type of entity with category of entities.
    -- Possible types include DX_NAME, ACUITY, DIRECTION, SYSTEM_ORGAN_SITE,
    -- TEST_NAME, TEST_VALUE, TEST_UNIT, PROCEDURE_NAME, or TREATMENT_NAME.
    SNOMEDCTEntity -> Maybe SNOMEDCTEntityType
type' :: Prelude.Maybe SNOMEDCTEntityType
  }
  deriving (SNOMEDCTEntity -> SNOMEDCTEntity -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SNOMEDCTEntity -> SNOMEDCTEntity -> Bool
$c/= :: SNOMEDCTEntity -> SNOMEDCTEntity -> Bool
== :: SNOMEDCTEntity -> SNOMEDCTEntity -> Bool
$c== :: SNOMEDCTEntity -> SNOMEDCTEntity -> Bool
Prelude.Eq, ReadPrec [SNOMEDCTEntity]
ReadPrec SNOMEDCTEntity
Int -> ReadS SNOMEDCTEntity
ReadS [SNOMEDCTEntity]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SNOMEDCTEntity]
$creadListPrec :: ReadPrec [SNOMEDCTEntity]
readPrec :: ReadPrec SNOMEDCTEntity
$creadPrec :: ReadPrec SNOMEDCTEntity
readList :: ReadS [SNOMEDCTEntity]
$creadList :: ReadS [SNOMEDCTEntity]
readsPrec :: Int -> ReadS SNOMEDCTEntity
$creadsPrec :: Int -> ReadS SNOMEDCTEntity
Prelude.Read, Int -> SNOMEDCTEntity -> ShowS
[SNOMEDCTEntity] -> ShowS
SNOMEDCTEntity -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SNOMEDCTEntity] -> ShowS
$cshowList :: [SNOMEDCTEntity] -> ShowS
show :: SNOMEDCTEntity -> String
$cshow :: SNOMEDCTEntity -> String
showsPrec :: Int -> SNOMEDCTEntity -> ShowS
$cshowsPrec :: Int -> SNOMEDCTEntity -> ShowS
Prelude.Show, forall x. Rep SNOMEDCTEntity x -> SNOMEDCTEntity
forall x. SNOMEDCTEntity -> Rep SNOMEDCTEntity x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SNOMEDCTEntity x -> SNOMEDCTEntity
$cfrom :: forall x. SNOMEDCTEntity -> Rep SNOMEDCTEntity x
Prelude.Generic)

-- |
-- Create a value of 'SNOMEDCTEntity' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'attributes', 'sNOMEDCTEntity_attributes' - An extracted segment of the text that is an attribute of an entity, or
-- otherwise related to an entity, such as the dosage of a medication
-- taken.
--
-- 'beginOffset', 'sNOMEDCTEntity_beginOffset' - The 0-based character offset in the input text that shows where the
-- entity begins. The offset returns the UTF-8 code point in the string.
--
-- 'category', 'sNOMEDCTEntity_category' - The category of the detected entity. Possible categories are
-- MEDICAL_CONDITION, ANATOMY, or TEST_TREATMENT_PROCEDURE.
--
-- 'endOffset', 'sNOMEDCTEntity_endOffset' - The 0-based character offset in the input text that shows where the
-- entity ends. The offset returns the UTF-8 code point in the string.
--
-- 'id', 'sNOMEDCTEntity_id' - The numeric identifier for the entity. This is a monotonically
-- increasing id unique within this response rather than a global unique
-- identifier.
--
-- 'sNOMEDCTConcepts', 'sNOMEDCTEntity_sNOMEDCTConcepts' - The SNOMED concepts that the entity could refer to, along with a score
-- indicating the likelihood of the match.
--
-- 'score', 'sNOMEDCTEntity_score' - The level of confidence that Comprehend Medical has in the accuracy of
-- the detected entity.
--
-- 'text', 'sNOMEDCTEntity_text' - The segment of input text extracted as this entity.
--
-- 'traits', 'sNOMEDCTEntity_traits' - Contextual information for the entity.
--
-- 'type'', 'sNOMEDCTEntity_type' - Describes the specific type of entity with category of entities.
-- Possible types include DX_NAME, ACUITY, DIRECTION, SYSTEM_ORGAN_SITE,
-- TEST_NAME, TEST_VALUE, TEST_UNIT, PROCEDURE_NAME, or TREATMENT_NAME.
newSNOMEDCTEntity ::
  SNOMEDCTEntity
newSNOMEDCTEntity :: SNOMEDCTEntity
newSNOMEDCTEntity =
  SNOMEDCTEntity'
    { $sel:attributes:SNOMEDCTEntity' :: Maybe [SNOMEDCTAttribute]
attributes = forall a. Maybe a
Prelude.Nothing,
      $sel:beginOffset:SNOMEDCTEntity' :: Maybe Int
beginOffset = forall a. Maybe a
Prelude.Nothing,
      $sel:category:SNOMEDCTEntity' :: Maybe SNOMEDCTEntityCategory
category = forall a. Maybe a
Prelude.Nothing,
      $sel:endOffset:SNOMEDCTEntity' :: Maybe Int
endOffset = forall a. Maybe a
Prelude.Nothing,
      $sel:id:SNOMEDCTEntity' :: Maybe Int
id = forall a. Maybe a
Prelude.Nothing,
      $sel:sNOMEDCTConcepts:SNOMEDCTEntity' :: Maybe [SNOMEDCTConcept]
sNOMEDCTConcepts = forall a. Maybe a
Prelude.Nothing,
      $sel:score:SNOMEDCTEntity' :: Maybe Double
score = forall a. Maybe a
Prelude.Nothing,
      $sel:text:SNOMEDCTEntity' :: Maybe Text
text = forall a. Maybe a
Prelude.Nothing,
      $sel:traits:SNOMEDCTEntity' :: Maybe [SNOMEDCTTrait]
traits = forall a. Maybe a
Prelude.Nothing,
      $sel:type':SNOMEDCTEntity' :: Maybe SNOMEDCTEntityType
type' = forall a. Maybe a
Prelude.Nothing
    }

-- | An extracted segment of the text that is an attribute of an entity, or
-- otherwise related to an entity, such as the dosage of a medication
-- taken.
sNOMEDCTEntity_attributes :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe [SNOMEDCTAttribute])
sNOMEDCTEntity_attributes :: Lens' SNOMEDCTEntity (Maybe [SNOMEDCTAttribute])
sNOMEDCTEntity_attributes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SNOMEDCTEntity' {Maybe [SNOMEDCTAttribute]
attributes :: Maybe [SNOMEDCTAttribute]
$sel:attributes:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe [SNOMEDCTAttribute]
attributes} -> Maybe [SNOMEDCTAttribute]
attributes) (\s :: SNOMEDCTEntity
s@SNOMEDCTEntity' {} Maybe [SNOMEDCTAttribute]
a -> SNOMEDCTEntity
s {$sel:attributes:SNOMEDCTEntity' :: Maybe [SNOMEDCTAttribute]
attributes = Maybe [SNOMEDCTAttribute]
a} :: SNOMEDCTEntity) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The 0-based character offset in the input text that shows where the
-- entity begins. The offset returns the UTF-8 code point in the string.
sNOMEDCTEntity_beginOffset :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe Prelude.Int)
sNOMEDCTEntity_beginOffset :: Lens' SNOMEDCTEntity (Maybe Int)
sNOMEDCTEntity_beginOffset = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SNOMEDCTEntity' {Maybe Int
beginOffset :: Maybe Int
$sel:beginOffset:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Int
beginOffset} -> Maybe Int
beginOffset) (\s :: SNOMEDCTEntity
s@SNOMEDCTEntity' {} Maybe Int
a -> SNOMEDCTEntity
s {$sel:beginOffset:SNOMEDCTEntity' :: Maybe Int
beginOffset = Maybe Int
a} :: SNOMEDCTEntity)

-- | The category of the detected entity. Possible categories are
-- MEDICAL_CONDITION, ANATOMY, or TEST_TREATMENT_PROCEDURE.
sNOMEDCTEntity_category :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe SNOMEDCTEntityCategory)
sNOMEDCTEntity_category :: Lens' SNOMEDCTEntity (Maybe SNOMEDCTEntityCategory)
sNOMEDCTEntity_category = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SNOMEDCTEntity' {Maybe SNOMEDCTEntityCategory
category :: Maybe SNOMEDCTEntityCategory
$sel:category:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe SNOMEDCTEntityCategory
category} -> Maybe SNOMEDCTEntityCategory
category) (\s :: SNOMEDCTEntity
s@SNOMEDCTEntity' {} Maybe SNOMEDCTEntityCategory
a -> SNOMEDCTEntity
s {$sel:category:SNOMEDCTEntity' :: Maybe SNOMEDCTEntityCategory
category = Maybe SNOMEDCTEntityCategory
a} :: SNOMEDCTEntity)

-- | The 0-based character offset in the input text that shows where the
-- entity ends. The offset returns the UTF-8 code point in the string.
sNOMEDCTEntity_endOffset :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe Prelude.Int)
sNOMEDCTEntity_endOffset :: Lens' SNOMEDCTEntity (Maybe Int)
sNOMEDCTEntity_endOffset = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SNOMEDCTEntity' {Maybe Int
endOffset :: Maybe Int
$sel:endOffset:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Int
endOffset} -> Maybe Int
endOffset) (\s :: SNOMEDCTEntity
s@SNOMEDCTEntity' {} Maybe Int
a -> SNOMEDCTEntity
s {$sel:endOffset:SNOMEDCTEntity' :: Maybe Int
endOffset = Maybe Int
a} :: SNOMEDCTEntity)

-- | The numeric identifier for the entity. This is a monotonically
-- increasing id unique within this response rather than a global unique
-- identifier.
sNOMEDCTEntity_id :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe Prelude.Int)
sNOMEDCTEntity_id :: Lens' SNOMEDCTEntity (Maybe Int)
sNOMEDCTEntity_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SNOMEDCTEntity' {Maybe Int
id :: Maybe Int
$sel:id:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Int
id} -> Maybe Int
id) (\s :: SNOMEDCTEntity
s@SNOMEDCTEntity' {} Maybe Int
a -> SNOMEDCTEntity
s {$sel:id:SNOMEDCTEntity' :: Maybe Int
id = Maybe Int
a} :: SNOMEDCTEntity)

-- | The SNOMED concepts that the entity could refer to, along with a score
-- indicating the likelihood of the match.
sNOMEDCTEntity_sNOMEDCTConcepts :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe [SNOMEDCTConcept])
sNOMEDCTEntity_sNOMEDCTConcepts :: Lens' SNOMEDCTEntity (Maybe [SNOMEDCTConcept])
sNOMEDCTEntity_sNOMEDCTConcepts = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SNOMEDCTEntity' {Maybe [SNOMEDCTConcept]
sNOMEDCTConcepts :: Maybe [SNOMEDCTConcept]
$sel:sNOMEDCTConcepts:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe [SNOMEDCTConcept]
sNOMEDCTConcepts} -> Maybe [SNOMEDCTConcept]
sNOMEDCTConcepts) (\s :: SNOMEDCTEntity
s@SNOMEDCTEntity' {} Maybe [SNOMEDCTConcept]
a -> SNOMEDCTEntity
s {$sel:sNOMEDCTConcepts:SNOMEDCTEntity' :: Maybe [SNOMEDCTConcept]
sNOMEDCTConcepts = Maybe [SNOMEDCTConcept]
a} :: SNOMEDCTEntity) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The level of confidence that Comprehend Medical has in the accuracy of
-- the detected entity.
sNOMEDCTEntity_score :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe Prelude.Double)
sNOMEDCTEntity_score :: Lens' SNOMEDCTEntity (Maybe Double)
sNOMEDCTEntity_score = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SNOMEDCTEntity' {Maybe Double
score :: Maybe Double
$sel:score:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Double
score} -> Maybe Double
score) (\s :: SNOMEDCTEntity
s@SNOMEDCTEntity' {} Maybe Double
a -> SNOMEDCTEntity
s {$sel:score:SNOMEDCTEntity' :: Maybe Double
score = Maybe Double
a} :: SNOMEDCTEntity)

-- | The segment of input text extracted as this entity.
sNOMEDCTEntity_text :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe Prelude.Text)
sNOMEDCTEntity_text :: Lens' SNOMEDCTEntity (Maybe Text)
sNOMEDCTEntity_text = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SNOMEDCTEntity' {Maybe Text
text :: Maybe Text
$sel:text:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Text
text} -> Maybe Text
text) (\s :: SNOMEDCTEntity
s@SNOMEDCTEntity' {} Maybe Text
a -> SNOMEDCTEntity
s {$sel:text:SNOMEDCTEntity' :: Maybe Text
text = Maybe Text
a} :: SNOMEDCTEntity)

-- | Contextual information for the entity.
sNOMEDCTEntity_traits :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe [SNOMEDCTTrait])
sNOMEDCTEntity_traits :: Lens' SNOMEDCTEntity (Maybe [SNOMEDCTTrait])
sNOMEDCTEntity_traits = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SNOMEDCTEntity' {Maybe [SNOMEDCTTrait]
traits :: Maybe [SNOMEDCTTrait]
$sel:traits:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe [SNOMEDCTTrait]
traits} -> Maybe [SNOMEDCTTrait]
traits) (\s :: SNOMEDCTEntity
s@SNOMEDCTEntity' {} Maybe [SNOMEDCTTrait]
a -> SNOMEDCTEntity
s {$sel:traits:SNOMEDCTEntity' :: Maybe [SNOMEDCTTrait]
traits = Maybe [SNOMEDCTTrait]
a} :: SNOMEDCTEntity) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Describes the specific type of entity with category of entities.
-- Possible types include DX_NAME, ACUITY, DIRECTION, SYSTEM_ORGAN_SITE,
-- TEST_NAME, TEST_VALUE, TEST_UNIT, PROCEDURE_NAME, or TREATMENT_NAME.
sNOMEDCTEntity_type :: Lens.Lens' SNOMEDCTEntity (Prelude.Maybe SNOMEDCTEntityType)
sNOMEDCTEntity_type :: Lens' SNOMEDCTEntity (Maybe SNOMEDCTEntityType)
sNOMEDCTEntity_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SNOMEDCTEntity' {Maybe SNOMEDCTEntityType
type' :: Maybe SNOMEDCTEntityType
$sel:type':SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe SNOMEDCTEntityType
type'} -> Maybe SNOMEDCTEntityType
type') (\s :: SNOMEDCTEntity
s@SNOMEDCTEntity' {} Maybe SNOMEDCTEntityType
a -> SNOMEDCTEntity
s {$sel:type':SNOMEDCTEntity' :: Maybe SNOMEDCTEntityType
type' = Maybe SNOMEDCTEntityType
a} :: SNOMEDCTEntity)

instance Data.FromJSON SNOMEDCTEntity where
  parseJSON :: Value -> Parser SNOMEDCTEntity
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"SNOMEDCTEntity"
      ( \Object
x ->
          Maybe [SNOMEDCTAttribute]
-> Maybe Int
-> Maybe SNOMEDCTEntityCategory
-> Maybe Int
-> Maybe Int
-> Maybe [SNOMEDCTConcept]
-> Maybe Double
-> Maybe Text
-> Maybe [SNOMEDCTTrait]
-> Maybe SNOMEDCTEntityType
-> SNOMEDCTEntity
SNOMEDCTEntity'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Attributes" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"BeginOffset")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Category")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"EndOffset")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Id")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"SNOMEDCTConcepts"
                            forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Score")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Text")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Traits" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Type")
      )

instance Prelude.Hashable SNOMEDCTEntity where
  hashWithSalt :: Int -> SNOMEDCTEntity -> Int
hashWithSalt Int
_salt SNOMEDCTEntity' {Maybe Double
Maybe Int
Maybe [SNOMEDCTConcept]
Maybe [SNOMEDCTTrait]
Maybe [SNOMEDCTAttribute]
Maybe Text
Maybe SNOMEDCTEntityCategory
Maybe SNOMEDCTEntityType
type' :: Maybe SNOMEDCTEntityType
traits :: Maybe [SNOMEDCTTrait]
text :: Maybe Text
score :: Maybe Double
sNOMEDCTConcepts :: Maybe [SNOMEDCTConcept]
id :: Maybe Int
endOffset :: Maybe Int
category :: Maybe SNOMEDCTEntityCategory
beginOffset :: Maybe Int
attributes :: Maybe [SNOMEDCTAttribute]
$sel:type':SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe SNOMEDCTEntityType
$sel:traits:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe [SNOMEDCTTrait]
$sel:text:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Text
$sel:score:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Double
$sel:sNOMEDCTConcepts:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe [SNOMEDCTConcept]
$sel:id:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Int
$sel:endOffset:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Int
$sel:category:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe SNOMEDCTEntityCategory
$sel:beginOffset:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Int
$sel:attributes:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe [SNOMEDCTAttribute]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [SNOMEDCTAttribute]
attributes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
beginOffset
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SNOMEDCTEntityCategory
category
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
endOffset
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
id
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [SNOMEDCTConcept]
sNOMEDCTConcepts
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Double
score
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
text
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [SNOMEDCTTrait]
traits
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SNOMEDCTEntityType
type'

instance Prelude.NFData SNOMEDCTEntity where
  rnf :: SNOMEDCTEntity -> ()
rnf SNOMEDCTEntity' {Maybe Double
Maybe Int
Maybe [SNOMEDCTConcept]
Maybe [SNOMEDCTTrait]
Maybe [SNOMEDCTAttribute]
Maybe Text
Maybe SNOMEDCTEntityCategory
Maybe SNOMEDCTEntityType
type' :: Maybe SNOMEDCTEntityType
traits :: Maybe [SNOMEDCTTrait]
text :: Maybe Text
score :: Maybe Double
sNOMEDCTConcepts :: Maybe [SNOMEDCTConcept]
id :: Maybe Int
endOffset :: Maybe Int
category :: Maybe SNOMEDCTEntityCategory
beginOffset :: Maybe Int
attributes :: Maybe [SNOMEDCTAttribute]
$sel:type':SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe SNOMEDCTEntityType
$sel:traits:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe [SNOMEDCTTrait]
$sel:text:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Text
$sel:score:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Double
$sel:sNOMEDCTConcepts:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe [SNOMEDCTConcept]
$sel:id:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Int
$sel:endOffset:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Int
$sel:category:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe SNOMEDCTEntityCategory
$sel:beginOffset:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe Int
$sel:attributes:SNOMEDCTEntity' :: SNOMEDCTEntity -> Maybe [SNOMEDCTAttribute]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [SNOMEDCTAttribute]
attributes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
beginOffset
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SNOMEDCTEntityCategory
category
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
endOffset
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
id
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [SNOMEDCTConcept]
sNOMEDCTConcepts
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Double
score
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
text
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [SNOMEDCTTrait]
traits
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SNOMEDCTEntityType
type'