networkInterfaceConv :: (MonadThrow m, Applicative m)
    => XmlElement -> m [InstanceNetworkInterface]
networkInterfaceConv = itemsSet "networkInterfaceSet" conv
  where
    attachmentConv e = InstanceNetworkInterfaceAttachment
        <$> e .< "attachmentId"
        <*> e .< "deviceIndex"
        <*> e .< "status"
        <*> e .< "attachTime"
        <*> e .< "deleteOnTermination"
    ipConv e = InstancePrivateIpAddress
        <$> e .< "privateIpAddress"
        <*> e .< "privateDnsName"
        <*> e .< "primary"
        <*> instanceNetworkInterfaceAssociationConv e
    conv e = InstanceNetworkInterface
        <$> e .< "networkInterfaceId"
        <*> e .< "subnetId"
        <*> e .< "vpcId"
        <*> e .< "description"
        <*> e .< "ownerId"
        <*> e .< "status"
        <*> e .< "macAddress"
        <*> e .< "privateIpAddress"
        <*> e .< "privateDnsName"
        <*> e .< "sourceDestCheck"
        <*> groupSetConv e
        <*> elementM "attachment" attachmentConv e
        <*> instanceNetworkInterfaceAssociationConv e
        <*> itemsSet "privateIpAddressesSet" ipConv e
networkInterfaceConv :: (MonadThrow m, Applicative m)
    => XmlElement -> m [InstanceNetworkInterface]
networkInterfaceConv = itemsSet "networkInterfaceSet" conv
  where
    attachmentConv e = InstanceNetworkInterfaceAttachment
        <$> e .< "attachmentId"
        <*> e .< "deviceIndex"
        <*> e .< "status"
        <*> e .< "attachTime"
        <*> e .< "deleteOnTermination"
    ipConv e = InstancePrivateIpAddress
        <$> e .< "privateIpAddress"
        <*> e .< "privateDnsName"
        <*> e .< "primary"
        <*> instanceNetworkInterfaceAssociationConv e
    conv e = InstanceNetworkInterface
        <$> e .< "networkInterfaceId"
        <*> e .< "subnetId"
        <*> e .< "vpcId"
        <*> e .< "description"
        <*> e .< "ownerId"
        <*> e .< "status"
        <*> e .< "macAddress"
        <*> e .< "privateIpAddress"
        <*> e .< "privateDnsName"
        <*> e .< "sourceDestCheck"
        <*> groupSetConv e
        <*> elementM "attachment" attachmentConv e
        <*> instanceNetworkInterfaceAssociationConv e
        <*> itemsSet "privateIpAddressesSet" ipConv e
networkInterfaceConv = itemsSet "networkInterfaceSet" conv
  where
    attachmentConv e = InstanceNetworkInterfaceAttachment
        <$> e .< "attachmentId"
        <*> e .< "deviceIndex"
        <*> e .< "status"
        <*> e .< "attachTime"
        <*> e .< "deleteOnTermination"
    ipConv e = InstancePrivateIpAddress
        <$> e .< "privateIpAddress"
        <*> e .< "privateDnsName"
        <*> e .< "primary"
        <*> instanceNetworkInterfaceAssociationConv e
    conv e = InstanceNetworkInterface
        <$> e .< "networkInterfaceId"
        <*> e .< "subnetId"
        <*> e .< "vpcId"
        <*> e .< "description"
        <*> e .< "ownerId"
        <*> e .< "status"
        <*> e .< "macAddress"
        <*> e .< "privateIpAddress"
        <*> e .< "privateDnsName"
        <*> e .< "sourceDestCheck"
        <*> groupSetConv e
        <*> elementM "attachment" attachmentConv e
        <*> instanceNetworkInterfaceAssociationConv e
        <*> itemsSet "privateIpAddressesSet" ipConv e