shithub: MicroHs

Download patch

ref: 56b7e496f93eae6172c55513dcd81f4875047c0b
parent: a188d78bedc9c0a0691c3580b6faff73e0d4bf9b
author: Lennart Augustsson <lennart@augustsson.net>
date: Sat Aug 31 06:51:31 EDT 2024

More Bytestring.

--- a/Makefile
+++ b/Makefile
@@ -199,7 +199,7 @@
 MCABALBIN=$(MCABAL)/bin
 MDIST=dist-mcabal
 BASE=base-$(VERSION)
-BASEMODULES=Control.Applicative Control.Arrow Control.DeepSeq Control.Error Control.Exception Control.Monad Control.Monad.Fail Control.Monad.ST Data.Array Data.Bits Data.Bool Data.Bounded Data.Char Data.Complex Data.Constraint Data.Data Data.Double Data.Dynamic Data.Either Data.Enum Data.Eq Data.Float Data.FloatW Data.Floating Data.Foldable Data.Fractional Data.Function Data.Functor Data.Functor.Const Data.Functor.Identity Data.IOArray Data.IORef Data.Int Data.Integer Data.Integral Data.Ix Data.List Data.List.NonEmpty Data.Maybe Data.Monoid Data.Num Data.Ord Data.Proxy Data.Ratio Data.Real Data.RealFloat Data.RealFrac Data.Records Data.STRef Data.Semigroup Data.String Data.Time.Clock Data.Time.Format Data.Traversable Data.Tuple Data.Type.Equality Data.TypeLits Data.Typeable Data.Version Data.Void Data.Word Data.ZipList Debug.Trace Foreign.C.String Foreign.C.Types Foreign.ForeignPtr Foreign.Marshal.Alloc Foreign.Marshal.Array Foreign.Marshal.Utils Foreign.Ptr Foreign.Storable GHC.Stack GHC.Types Numeric Numeric.FormatFloat Numeric.Natural Prelude System.Cmd System.Compress System.Directory System.Environment System.Exit System.IO System.IO.MD5 System.IO.PrintOrRun System.IO.Serialize System.IO.TimeMilli System.IO.Unsafe System.Info System.Process Text.Printf Text.Read Text.Read.Lex Text.Read.Numeric Text.Show TimeCompat Unsafe.Coerce
+BASEMODULES=Control.Applicative Control.Arrow Control.DeepSeq Control.Error Control.Exception Control.Monad Control.Monad.Fail Control.Monad.ST Data.Array Data.Bits Data.Bool Data.Bounded Data.ByteString Data.Char Data.Complex Data.Constraint Data.Data Data.Double Data.Dynamic Data.Either Data.Enum Data.Eq Data.Float Data.FloatW Data.Floating Data.Foldable Data.Fractional Data.Function Data.Functor Data.Functor.Const Data.Functor.Identity Data.IOArray Data.IORef Data.Int Data.Integer Data.Integral Data.Ix Data.List Data.List.NonEmpty Data.Maybe Data.Monoid Data.Num Data.Ord Data.Proxy Data.Ratio Data.Real Data.RealFloat Data.RealFrac Data.Records Data.STRef Data.Semigroup Data.String Data.Time.Clock Data.Time.Format Data.Traversable Data.Tuple Data.Type.Equality Data.TypeLits Data.Typeable Data.Version Data.Void Data.Word Data.ZipList Debug.Trace Foreign.C.String Foreign.C.Types Foreign.ForeignPtr Foreign.Marshal.Alloc Foreign.Marshal.Array Foreign.Marshal.Utils Foreign.Ptr Foreign.Storable GHC.Stack GHC.Types Numeric Numeric.FormatFloat Numeric.Natural Prelude System.Cmd System.Compress System.Directory System.Environment System.Exit System.IO System.IO.MD5 System.IO.PrintOrRun System.IO.Serialize System.IO.TimeMilli System.IO.Unsafe System.Info System.Process Text.Printf Text.Read Text.Read.Lex Text.Read.Numeric Text.Show TimeCompat Unsafe.Coerce
 
 $(MCABALBIN)/mhs: bin/mhs
 	@mkdir -p $(MCABALBIN)
--- a/lib/Data/ByteString.hs
+++ b/lib/Data/ByteString.hs
@@ -4,6 +4,7 @@
   pack, unpack,
   ) where
 import Prelude hiding ((++))
+import Data.String
 import Data.Word(Word8)
 
 data ByteString  -- primitive type
@@ -43,7 +44,10 @@
   (>=)    = primBSGE
 
 instance Show ByteString where
-  showsPrec _ bs = showString "pack" . showsPrec 0 (unpack bs)
+  showsPrec p bs = showsPrec p (map (toEnum . fromEnum) (unpack bs) :: [Char])
+
+instance IsString ByteString where
+  fromString = pack . map (toEnum . fromEnum)
 
 append :: ByteString -> ByteString -> ByteString
 append = primBSappend
--- a/lib/libs.cabal
+++ b/lib/libs.cabal
@@ -24,6 +24,7 @@
         Data.Bits
         Data.Bool
         Data.Bounded
+        Data.ByteString
         Data.Char
         Data.Complex
         Data.Constraint
--- a/tests/Bytestring.hs
+++ b/tests/Bytestring.hs
@@ -11,6 +11,9 @@
 bs3 :: ByteString
 bs3 = pack [1,2]
 
+bs4 :: ByteString
+bs4 = pack [1,3,4]
+
 main :: IO ()
 main = do
   print (unpack bs1)
@@ -17,6 +20,8 @@
   print bs1
   print $ bs1 `append` bs2
   print [ op x y | op <- [(==), (/=), (<), (<=), (>), (>=)]
-                 , x <- [bs1, bs2, bs3]
-                 , y <- [bs1, bs2, bs3]
+                 , x <- [bs1, bs2, bs3, bs4]
+                 , y <- [bs1, bs2, bs3, bs4]
         ]
+  print [ compare x y | x <- [bs1, bs2, bs3, bs4], y <- [bs1, bs2, bs3, bs4] ]
+  print $ unpack "abc"
--- a/tests/Bytestring.ref
+++ b/tests/Bytestring.ref
@@ -1,4 +1,6 @@
 [1,2,3]
-pack[1,2,3]
-pack[1,2,3,1,2,4]
-[True,False,False,False,True,False,False,False,True,False,True,True,True,False,True,True,True,False,False,True,False,False,False,False,True,True,False,True,True,False,False,True,False,True,True,True,False,False,True,True,False,True,False,False,False,True,False,True,True,True,True,False,False,True]
+"\1\2\3"
+"\1\2\3\1\2\4"
+[True,False,False,False,False,True,False,False,False,False,True,False,False,False,False,True,False,True,True,True,True,False,True,True,True,True,False,True,True,True,True,False,False,True,False,True,False,False,False,True,True,True,False,True,False,False,False,False,True,True,False,True,False,True,False,True,True,True,True,True,False,False,False,True,False,False,True,False,True,False,True,False,False,False,False,False,True,True,True,False,True,False,True,False,True,True,True,False,False,False,True,False,True,True,True,True]
+[EQ,LT,GT,LT,GT,EQ,GT,LT,LT,LT,EQ,LT,GT,GT,GT,EQ]
+[97,98,99]
--