Esempio n. 1
0
        public static ListMonad <T> ToListMonad <T>(this Monad <T> value)
        {
            ListMonad <T> result = new ListMonad <T>();

            foreach (T element in value)
            {
                result.Add(element);
            }
            return(result);
        }
Esempio n. 2
0
        public override Monad <B> Fmap <B>(Func <CacheEntry <K, V>, B> function)
        {
            ListMonad <B> result = new ListMonad <B>();

            Lock.EnterWriteLock();
            try
            {
                foreach (var element in cacheDict)
                {
                    result.Add(function(element.Value));
                }
            }
            finally
            {
                Lock.ExitWriteLock();
            }
            return(result);
        }
Esempio n. 3
0
        public override Monad <C> Com <B, C>(Func <CacheEntry <K, V>, B, C> function, Monad <B> mOther)
        {
            ListMonad <C> result = new ListMonad <C>();

            Lock.EnterWriteLock();
            try
            {
                foreach (var element in cacheDict.Values)
                {
                    foreach (var elementB in mOther)
                    {
                        result.Add(function(element, elementB));
                    }
                }
            }
            finally
            {
                Lock.ExitWriteLock();
            }
            return(result);
        }
Esempio n. 4
0
        public override Monad <B> App <B>(Monad <Func <CacheEntry <K, V>, B> > functionMonad)
        {
            ListMonad <B> result = new ListMonad <B>();

            Lock.EnterWriteLock();
            try
            {
                foreach (var element in cacheDict.Values)
                {
                    foreach (var func in functionMonad)
                    {
                        result.Add(func(element));
                    }
                }
            }
            finally
            {
                Lock.ExitWriteLock();
            }
            return(result);
        }
Esempio n. 5
0
        public override Monad <B> Bind <B>(Func <CacheEntry <K, V>, Monad <B> > func)
        {
            ListMonad <B> result = new ListMonad <B>();

            Lock.EnterWriteLock();
            try
            {
                foreach (var element in cacheDict.Values)
                {
                    foreach (var fRes in func(element))
                    {
                        result.Add(fRes);
                    }
                }
            }
            finally
            {
                Lock.ExitWriteLock();
            }
            return(result);
        }