/
Lens.purs
73 lines (62 loc) · 2.16 KB
/
Lens.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
-- | This module defines a collections of Lenses for convenience in accessing
-- | deeply nested properties inside an AlexaRequest
module Amazon.Alexa.Lens where
import Data.Lens (Lens', lens)
import Data.Lens.Record (prop)
import Type.Data.Symbol (SProxy(..))
import Amazon.Alexa.Types (AlexaRequest(..), AlexaSession, AlexaContext)
-- | The 'body' of an AlexaResponse contains those properties shared
-- | by all types of requests
_body :: Lens' AlexaRequest
{ version :: String
, session :: AlexaSession
, context :: AlexaContext
}
_body = lens get set
where
get (LaunchRequest r) =
{ version: r.version
, session: r.session
, context: r.context
}
get (IntentRequest r) =
{ version: r.version
, session: r.session
, context: r.context
}
get (SessionEndedRequest r) =
{ version: r.version
, session: r.session
, context: r.context
}
set (LaunchRequest r) s = LaunchRequest (r
{ version = s.version
, session = s.session
, context = s.context
})
set (IntentRequest r) s = IntentRequest (r
{ version = s.version
, session = s.session
, context = s.context
})
set (SessionEndedRequest r) s = SessionEndedRequest (r
{ version = s.version
, session = s.session
, context = s.context
})
_response :: ∀ r a. Lens' { response :: a | r} a
_response = prop (SProxy :: SProxy "response")
_sessionAttributes:: ∀ r a. Lens' { sessionAttributes :: a | r} a
_sessionAttributes = prop (SProxy :: SProxy "sessionAttributes")
_outputSpeech :: ∀ r a. Lens' { outputSpeech :: a | r} a
_outputSpeech = prop (SProxy :: SProxy "outputSpeech")
_card :: ∀ r a. Lens' { card :: a | r } a
_card = prop (SProxy :: SProxy "card")
_type :: ∀ r a. Lens' { type :: a | r } a
_type = prop (SProxy :: SProxy "type")
_reprompt :: ∀ r a. Lens' { reprompt :: a | r} a
_reprompt = prop (SProxy :: SProxy "reprompt")
_shouldEndSession :: ∀ r. Lens' { shouldEndSession :: Boolean | r} Boolean
_shouldEndSession = prop (SProxy :: SProxy "shouldEndSession")
_text :: ∀ r. Lens' { text :: String | r} String
_text = prop (SProxy :: SProxy "text")