public override Monad <C> Com <B, C>(Monad <Func <CacheEntry <K, V>, B, Monad <C> > > functionMonad, Monad <B> mOther) { Monad <C> result = null; Lock.EnterWriteLock(); try { foreach (var element in cacheDict.Values) { foreach (var func in functionMonad) { foreach (var elementB in mOther) { if (result == null) { result = func(element, elementB); } else { result = result.Concatenate(func(element, elementB)); } } } } } finally { Lock.ExitWriteLock(); } return(result); }
public override Func <CacheEntry <K, V>, Monad <C> > Kleisli <B, C>(Func <CacheEntry <K, V>, Monad <B> > fAtB, Func <B, Monad <C> > fBtC) { return((a) => { Monad <B> result = null; Lock.EnterWriteLock(); try { foreach (var element in cacheDict.Values) { if (result == null) { result = fAtB(element); } else { result.Concatenate(fAtB(element)); } } } finally { Lock.ExitWriteLock(); } return result.Bind(fBtC); }); }
public override Monad <C> Com <B, C>(Monad <Func <A, B, Monad <C> > > functionMonad, Monad <B> mOther) { Monad <C> resultMonad = null; foreach (var function in functionMonad) { if (function != null) { foreach (var value in mOther) { if (resultMonad == null) { resultMonad = function(idValue, value); } else { resultMonad = resultMonad.Concatenate(function(idValue, value)); } } } } if (resultMonad == null) { resultMonad = new Identity <C>(); } return(resultMonad); }
public override Monad <B> Bind <B>(Func <A, int, Monad <B> > func) { Monad <B> result = null; for (int i = 0; i < list.Count; i++) { if (result == null) { result = func(list[i], i); } else { result.Concatenate(func(list[i], i)); } } return(result); }
public override Monad <B> Bind <B>(Func <A, Monad <B> > func) { Monad <B> result = null; foreach (A element in list) { if (result == null) { result = func(element); } else { result.Concatenate(func(element)); } } return(result); }
public override Func <A, Monad <C> > Kleisli <B, C>(Func <A, Monad <B> > fAtB, Func <B, Monad <C> > fBtC) { return((a) => { Monad <B> result = null; foreach (A element in list) { if (result == null) { result = fAtB(element); } else { result.Concatenate(fAtB(element)); } } return result.Bind(fBtC); }); }
public override Monad <B> App <B>(Monad <Func <A, Monad <B> > > functionMonad) { Monad <B> resultMonad = null; foreach (var function in functionMonad) { if (function != null) { if (resultMonad == null) { resultMonad = function(idValue); } else { resultMonad = resultMonad.Concatenate(function(idValue)); } } } if (resultMonad == null) { resultMonad = new Identity <B>(); } return(resultMonad); }