using System.Collections.Generic;
public static void Main()
var some = Maybe<int>.Some(10);
var none = Maybe<int>.None;
var emptyList = new List<int>();
var list = new List<int>{ 1, 2};
public interface Functor<F>
HKT<F, B> map<A,B>(Func<A,B> f, HKT<F,A> fa);
public T Value { get; private set; }
public bool HasValue { get; private set;}
public static Maybe<T> Some(T val){ return new Maybe<T>(val); }
public static Maybe<T> None = new Maybe<T>();
public class FMaybe<T> : Functor<IsMaybe>
public Maybe<B> map<A,B>(Func<A,B> f, Maybe<A> fa)