on master help sign in
Allow the user to choose tab character.
ac95cdfPaweł Nowak
Data/Syntax/Indent.hs+5−6
@@ -12,7 +12,7 @@ import Data.Syntax.Char
12import Data.Syntax.Combinator
12import Data.Syntax.Combinator
13import Prelude hiding (takeWhile, take)
13import Prelude hiding (takeWhile, take)
14
14
15−newtype Indent m a = Indent { unIndent :: Int -> m a }
15+newtype Indent m a = Indent { unIndent :: (Int, m ()) -> m a }
16
16
17instance SemiIsoFunctor m => SemiIsoFunctor (Indent m) where
17instance SemiIsoFunctor m => SemiIsoFunctor (Indent m) where
18 simap f (Indent g) = Indent $ \i -> simap f (g i)
18 simap f (Indent g) = Indent $ \i -> simap f (g i)
@@ -49,11 +49,10 @@ instance SyntaxChar syn seq => SyntaxChar (Indent syn) seq where
49 scientific = Indent $ const scientific
49 scientific = Indent $ const scientific
50
50
51breakLine :: SyntaxChar syn seq => Indent syn ()
51breakLine :: SyntaxChar syn seq => Indent syn ()
52−breakLine = Indent $ \i -> opt (char '\n') /*
52+breakLine = Indent $ \(i, tab) -> opt (char '\n') /* opt (sireplicate_ i tab) /* spaces_
53− (constant (fromList $ replicate (4*i) ' ') /$/ takeWhile isSpace)
54
53
55indented :: Indent m a -> Indent m a
54indented :: Indent m a -> Indent m a
56−indented (Indent f) = Indent $ \i -> f (i + 1)
55+indented (Indent f) = Indent $ \(i, tab) -> f (i + 1, tab)
57
56
58−runIndent :: Indent m a -> m a
57+runIndent :: Indent m a -> m () -> m a
59−runIndent = ($ 0) . unIndent
58+runIndent = ($ 0) . curry . unIndent