Example #1
0
        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);
        }
Example #2
0
 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);
     });
 }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
            });
        }
Example #7
0
        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);
        }