packages feed

cmonad 0.1.0.1 → 0.1.1.0

raw patch · 5 files changed

+41/−20 lines, 5 files

Files

cmonad.cabal view
@@ -1,5 +1,5 @@ Name:		cmonad-Version:	0.1.0.1+Version:	0.1.1.0 License:	BSD3 Author:		Lennart Augustsson Maintainer:	Lennart Augustsson@@ -7,7 +7,7 @@ Synopsis:	A library for C-like programming Stability:      experimental Build-type:	Simple-Description:	A library for C-like programming+Description:	A library for C-like programming.  The code looks imperative, and you might think it would be efficient, but GHC lacks certain optimizations that makes it very slow. Hs-Source-Dirs: src Build-Depends:	base, array Exposed-modules:
examples/Makefile view
@@ -1,22 +1,14 @@ GHC=ghc GHCFLAGS= -O --make -i../src -odir build -hidir build -run:	Inf.run QSort.run--build:-	mkdir -p build--Inf.run:	Inf.exe-	./Inf.exe--Inf.exe:	build Inf.hs-	$(GHC) $(GHCFLAGS) -main-is Inf.main Inf.hs -o Inf.exe+run:	Fac.run Fib.run Inf.run QSort.run Array2.run Cat.run -QSort.run:	QSort.exe-	./QSort.exe+.SUFFIXES: .hs .run -QSort.exe:	build QSort.hs-	$(GHC) $(GHCFLAGS) -main-is QSort.main QSort.hs -o QSort.exe+.hs.run:+	@mkdir -p build+	$(GHC) $(GHCFLAGS) -main-is $*.main $*.hs -o $*.exe+	echo Hello | ./$*.exe  clean: 	rm -rf *.exe* build
src/Language/CMonad/MonadRef.hs view
@@ -1,8 +1,10 @@-{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, KindSignatures #-} module Language.CMonad.MonadRef where+import Control.Monad.ST import Data.IORef import Data.STRef-import Control.Monad.ST(ST)+import Data.Array.ST+import Data.Array.IO  class (Monad m) => MonadRef m r | m -> r, r -> m where     newRef :: a -> m (r a)@@ -24,3 +26,8 @@     readRef = readSTRef     {-# INLINE writeRef #-}     writeRef = writeSTRef++class TheArray (m :: * -> *) (arr :: * -> * -> *) | m -> arr++instance TheArray IO IOArray+instance TheArray (ST s) (STArray s)
src/Language/CMonad/Ops.hs view
@@ -3,6 +3,7 @@ -- XXX Despite what I think should be enough LANGUAGE options I still need -fglasgow-exts. module Language.CMonad.Ops(module Language.CMonad.Ops) where import qualified Prelude as P+import System.IO import Language.CMonad.CPrelude import Language.CMonad.MonadRef(MonadRef) import Language.CMonad.Prim@@ -89,6 +90,9 @@     y =: t     return () +autoU :: (MonadRef m r) => E m (forall v . E' v m a)+autoU = auto undefined+ -----------------------------  while :: (Monad m) => E m Bool -> E m a -> E m ()@@ -129,3 +133,21 @@ {-# INLINE retrn #-} retrn :: E m a -> E m a retrn x = x++-----------------------------++type EIO a = E IO a++getchar :: () -> EIO Int+getchar () = embed $ do+    eof <- hIsEOF stdin+    if eof then+        return (-1)+     else+        fmap fromEnum $ hGetChar stdin+ +putchar :: EIO Int -> EIO Int+putchar c = embed $ do+    c' <- runE c+    hPutChar stdout (toEnum c')+    return 0
src/Language/CMonad/Prim.hs view
@@ -60,7 +60,7 @@   )  -- |A un-initialized multi-dimensional array.  E.g., @arrayU [2,3]@ is a 2x3 array.-arrayU :: forall arr m a i . (Ix i, Num i, MArray arr a m) =>+arrayU :: forall arr m a i . (Ix i, Num i, MArray arr a m, TheArray m arr) =>        [E m i] -> E m (forall v . [E m i] -> E' v m a) arrayU ss = E ( do     ss' <- mapM runE ss@@ -77,7 +77,7 @@   )  -- |An C array initialized with a normal array.-arrayA :: forall arr m a i . (Ix i, MArray arr a m) =>+arrayA :: forall arr m a i . (Ix i, MArray arr a m, TheArray m arr) =>        Array i a -> E m (forall v . [E m i] -> E' v m a) arrayA aa = E ( do     a <- thaw aa :: m (arr i a)