```coffeescript
{Emitter} = require 'event-kit'

# Experimental: This will likely change, do not use.
module.exports =
class Notification
  constructor: (@type, @message, @options={}) ->
    @emitter = new Emitter
    @timestamp = new Date()
    @dismissed = true
    @dismissed = false if @isDismissable()
    @displayed = false

  onDidDismiss: (callback) ->
    @emitter.on 'did-dismiss', callback

  onDidDisplay: (callback) ->
    @emitter.on 'did-display', callback

  getOptions: -> @options

  getType: -> @type

  getMessage: -> @message

  getTimestamp: -> @timestamp

  getDetail: -> @options.detail

  isEqual: (other) ->
    @getMessage() is other.getMessage() \
      and @getType() is other.getType() \
      and @getDetail() is other.getDetail()

  dismiss: ->
    return unless @isDismissable() and not @isDismissed()
    @dismissed = true
    @emitter.emit 'did-dismiss', this

  isDismissed: -> @dismissed

  isDismissable: -> !!@options.dismissable

  wasDisplayed: -> @displayed

  setDisplayed: (@displayed) ->
    @emitter.emit 'did-display', this

  getIcon: ->
    return @options.icon if @options.icon?
    switch @type
      when 'fatal' then 'bug'
      when 'error' then 'flame'
      when 'warning' then 'alert'
      when 'info' then 'info'
      when 'success' then 'check'
```

Mark Notification public and add docs
user
```coffeescript
{Emitter} = require 'event-kit'

# Public: A notification to the user containing a message and type.
module.exports =
class Notification
  constructor: (@type, @message, @options={}) ->
    @emitter = new Emitter
    @timestamp = new Date()
    @dismissed = true
    @dismissed = false if @isDismissable()
    @displayed = false

  onDidDismiss: (callback) ->
    @emitter.on 'did-dismiss', callback

  onDidDisplay: (callback) ->
    @emitter.on 'did-display', callback

  getOptions: -> @options

  # Public: Retrieves the {String} notification type.
  getType: -> @type

  # Public: Retrieves the {String} notification message.
  getMessage: -> @message

  getTimestamp: -> @timestamp

  getDetail: -> @options.detail

  isEqual: (other) ->
    @getMessage() is other.getMessage() \
      and @getType() is other.getType() \
      and @getDetail() is other.getDetail()

  dismiss: ->
    return unless @isDismissable() and not @isDismissed()
    @dismissed = true
    @emitter.emit 'did-dismiss', this

  isDismissed: -> @dismissed

  isDismissable: -> !!@options.dismissable

  wasDisplayed: -> @displayed

  setDisplayed: (@displayed) ->
    @emitter.emit 'did-display', this

  getIcon: ->
    return @options.icon if @options.icon?
    switch @type
      when 'fatal' then 'bug'
      when 'error' then 'flame'
      when 'warning' then 'alert'
      when 'info' then 'info'
      when 'success' then 'check'
```
assistant