entriesHaveSameContent :: (MonadAppError m, MonadEncrypt m) => Entry -> Entry -> m Bool
entriesHaveSameContent e1 e2 = do
  plaintext1 <- decrypt (entryCiphertext e1)
  plaintext2 <- decrypt (entryCiphertext e2)
  return ((entryDescription e1 == entryDescription e2) &&
          (entryIdentity    e1 == entryIdentity    e2) &&
          (entryMeta        e1 == entryMeta        e2) &&
          (plaintext1          == plaintext2))
entriesHaveSameContent :: (MonadAppError m, MonadEncrypt m) => Entry -> Entry -> m Bool
entriesHaveSameContent e1 e2 = do
  plaintext1 <- decrypt (entryCiphertext e1)
  plaintext2 <- decrypt (entryCiphertext e2)
  return ((entryDescription e1 == entryDescription e2) &&
          (entryIdentity    e1 == entryIdentity    e2) &&
          (entryMeta        e1 == entryMeta        e2) &&
          (plaintext1          == plaintext2))
entriesHaveSameContent e1 e2 = do
  plaintext1 <- decrypt (entryCiphertext e1)
  plaintext2 <- decrypt (entryCiphertext e2)
  return ((entryDescription e1 == entryDescription e2) &&
          (entryIdentity    e1 == entryIdentity    e2) &&
          (entryMeta        e1 == entryMeta        e2) &&
          (plaintext1          == plaintext2))