namespace GenericIdentity { function identity < T > ( value ) { return value ; } type TransformFunction = ( value : number ) => number ; function getNumbers ( transform = identity ) { throw Error ( "Not implemented" ) ; } class Widget { } class AssembledWidget { } type PluckFunction = ( widgets : Widget [ ] ) => Widget [ ] ; function assembleWidgets ( pluck = identity ) { throw Error ( "Not implemented" ) ; } }