functional
abstract