Joe*_*and 4 haskell lenses haskell-lens
抱歉这个措辞不好的标题,但我甚至不知道如何正确地问它.
我怎么能这个呢?
instPublicIP :: Instance -> Maybe Text
instPublicIP inst =
inst ^. insNetworkInterfaces ^? ix 0 . iniAssociation . _Just . iniaPublicIP . _Just
Run Code Online (Sandbox Code Playgroud)
进入这个
instPublicIP' :: Lens' Instance (Maybe Text)
instPublicIP' = insNetworkInterfaces ^? ix 0 . iniAssociation . _Just . iniaPublicIP . _Just
Run Code Online (Sandbox Code Playgroud)
当我尝试时,我收到以下错误:
Main.hs:198:3:
Couldn't match expected type ‘(Maybe Text -> f (Maybe Text))
-> Instance -> f Instance’
with actual type ‘Maybe Text’
Relevant bindings include
instPublicIP' :: (Maybe Text -> f (Maybe Text))
-> Instance -> f Instance
(bound at app/Main.hs:197:1)
In the expression:
insNetworkInterfaces
^? ix 0 . iniAssociation . _Just . iniaPublicIP . _Just
In an equation for ‘instPublicIP'’:
instPublicIP'
= insNetworkInterfaces
^? ix 0 . iniAssociation . _Just . iniaPublicIP . _Just
Main.hs:198:27:
Couldn't match type ‘InstanceNetworkInterface’
with ‘Instance -> f0 Instance’
Expected type: (InstanceNetworkInterface
-> Const (Data.Monoid.First Text) InstanceNetworkInterface)
-> (([InstanceNetworkInterface] -> f0 [InstanceNetworkInterface])
-> Instance -> f0 Instance)
-> Const
(Data.Monoid.First Text)
(([InstanceNetworkInterface] -> f0 [InstanceNetworkInterface])
-> Instance -> f0 Instance)
Actual type: (IxValue
(([InstanceNetworkInterface] -> f0 [InstanceNetworkInterface])
-> Instance -> f0 Instance)
-> Const
(Data.Monoid.First Text)
(IxValue
(([InstanceNetworkInterface] -> f0 [InstanceNetworkInterface])
-> Instance -> f0 Instance)))
-> (([InstanceNetworkInterface] -> f0 [InstanceNetworkInterface])
-> Instance -> f0 Instance)
-> Const
(Data.Monoid.First Text)
(([InstanceNetworkInterface] -> f0 [InstanceNetworkInterface])
-> Instance -> f0 Instance)
In the first argument of ‘(.)’, namely ‘ix 0’
In the second argument of ‘(^?)’, namely
‘ix 0 . iniAssociation . _Just . iniaPublicIP . _Just’
Run Code Online (Sandbox Code Playgroud)
结果我只需要替换^?with .并更改Lens'为Traversal'
instPublicIP' :: Traversal' Instance (Maybe Text)
instPublicIP' = insNetworkInterfaces . ix 0 . iniAssociation . _Just . iniaPublicIP
Run Code Online (Sandbox Code Playgroud)