git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Replace ++ with Semigroup in Prelude
commitd9a1d4376af0a90de1716ba8cc2a69188b784df4 authorPhil Freeman <paf31@cantab.net> dateWed 19 Mar 2014, 20:49 (13 years ago) parent53e8af8
5 files changed+28−9
examples/passing/Operators.purs+1−2 prelude/prelude.purs+17−5 src/Language/PureScript/Constants.hs+6 src/Language/PureScript/Optimizer.hs−1 src/Language/PureScript/Optimizer/Inliner.hs+4−1
examples/passing/Operators.purs+1−2
@@ -4,6 +4,7 @@ module Main where
44 import Control.Monad.Eff
55 import Debug.Trace
66
7+ bar :: String -> String -> String
78 bar = \s1 s2 -> s1 ++ s2
89
910 test1 :: forall n. (Num n) => n -> n -> (n -> n -> n) -> n
@@ -26,8 +27,6 @@ module Main where
2627
2728 test6 = ((\x -> x) `k` 2) 3
2829
29− (<>) = \s1 s2 -> s1 ++ s2
30−
3130 test7 = "Hello" <> "World!"
3231
3332 (@@) :: forall a b. (a -> b) -> a -> b
prelude/prelude.purs+17−5
@@ -325,13 +325,25 @@ module Prelude where
325325 (||) = boolOr
326326 not = boolNot
327327
328+ infixr 6 <>
329+
330+ class Semigroup s where
331+ (<>) :: s -> s -> s
332+
328333 infixr 5 ++
329334
330− foreign import (++) "function $plus$plus(s1) {\
331− \ return function(s2) {\
332− \ return s1 + s2;\
333− \ };\
334− \}" :: String -> String -> String
335+ (++) :: forall s. (Semigroup s) => s -> s -> s
336+ (++) = (<>)
337+
338+ foreign import concatString
339+ "function concatString(s1) {\
340+ \ return function(s2) {\
341+ \ return s1 + s2;\
342+ \ };\
343+ \}" :: String -> String -> String
344+
345+ instance semigroupString :: Semigroup String where
346+ (<>) = concatString
335347
336348module Data.Eq where
337349
src/Language/PureScript/Constants.hs+6
@@ -29,6 +29,9 @@ module Language.PureScript.Constants where
2929(++) :: String
3030(++) = "++"
3131
32+(<>) :: String
33+(<>) = "<>"
34+
3235(>>=) :: String
3336(>>=) = ">>="
3437
@@ -146,6 +149,9 @@ pokeSTArray = "pokeSTArray"
146149monadEffDictionary :: String
147150monadEffDictionary = "monadEff"
148151
152+semigroupString :: String
153+semigroupString = "semigroupString"
154+
149155numNumber :: String
150156numNumber = "numNumber"
151157
src/Language/PureScript/Optimizer.hs−1
@@ -64,7 +64,6 @@ optimize opts | optionsNoOptimizations opts = id
6464 , inlineOperator (C.$) $ \f x -> JSApp f [x]
6565 , inlineOperator (C.#) $ \x f -> JSApp f [x]
6666 , inlineOperator (C.!!) $ flip JSIndexer
67− , inlineOperator (C.++) $ JSBinary Add
6867 , inlineCommonOperators ]
6968
7069untilFixedPoint :: (Eq a) => (a -> a) -> a -> a
src/Language/PureScript/Optimizer/Inliner.hs+4−1
@@ -83,7 +83,10 @@ inlineOperator op f = everywhere (mkT convert)
8383
8484inlineCommonOperators :: JS -> JS
8585inlineCommonOperators = applyAll
86− [ binary C.numNumber (C.+) Add
86+ [ binary C.semigroupString (C.++) Add
87+ , binary C.semigroupString (C.<>) Add
88+
89+ , binary C.numNumber (C.+) Add
8790 , binary C.numNumber (C.-) Subtract
8891 , binary C.numNumber (C.*) Multiply
8992 , binary C.numNumber (C./) Divide