Tested with latest version on play.clickhouse.com (22.10.1.1875)

```sql
SELECT arrayFirst((x,f) -> f, [1,2,3,NULL], [0,1,0,0]) as test
```
returns 2 as expected.

But:
```sql
SELECT arrayFirstOrNull((x,f) -> f, [1,2,3,NULL], [0,1,0,0]) as test

Code: 44. DB::Exception: Nullable(UInt8) cannot be inside Nullable column. (ILLEGAL_COLUMN) (version 22.10.1.1875 (official build))
```
tries to wrap another Nullable layer. It seems to be inconsistent in some way if we should use this function on various columns programatically.

And, BTW, it would be great if we could use Nullable columns in filter column of higher-order functions. Why is this forbidden now?
```sql
SELECT arrayFirst((x,f) -> f, [1,2,3,4], [0,1,0,NULL]) as test

Code: 44. DB::Exception: Unexpected type of filter column. (ILLEGAL_COLUMN) (version 22.10.1.1875 (official build))
```
#include <Columns/ColumnsNumber.h>
#include <Columns/ColumnNullable.h>
#include <DataTypes/DataTypesNumber.h>
#include <Functions/FunctionFactory.h>
#include "FunctionArrayMapped.h"
namespace DB
{
namespace ErrorCodes
{
    extern const int ILLEGAL_COLUMN;
}
enum class ArrayFirstLastStrategy : uint8_t
{
    First,
    Last
};
enum class ArrayFirstLastElementNotExistsStrategy : uint8_t