Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mu-client-ghc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
3
Issues
3
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mu
mu-client-ghc
Commits
70a4766e
Commit
70a4766e
authored
Sep 26, 2016
by
nathyong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add GHC wired-in libraries
parent
e2561239
Changes
208
Hide whitespace changes
Inline
Side-by-side
Showing
208 changed files
with
50210 additions
and
12 deletions
+50210
-12
app/Main.hs
app/Main.hs
+224
-12
libraries/base/.authorspellings
libraries/base/.authorspellings
+12
-0
libraries/base/.gitignore
libraries/base/.gitignore
+22
-0
libraries/base/Control/Applicative.hs
libraries/base/Control/Applicative.hs
+111
-0
libraries/base/Control/Arrow.hs
libraries/base/Control/Arrow.hs
+374
-0
libraries/base/Control/Category.hs
libraries/base/Control/Category.hs
+67
-0
libraries/base/Control/Concurrent.hs
libraries/base/Control/Concurrent.hs
+668
-0
libraries/base/Control/Concurrent/Chan.hs
libraries/base/Control/Concurrent/Chan.hs
+166
-0
libraries/base/Control/Concurrent/MVar.hs
libraries/base/Control/Concurrent/MVar.hs
+274
-0
libraries/base/Control/Concurrent/QSem.hs
libraries/base/Control/Concurrent/QSem.hs
+130
-0
libraries/base/Control/Concurrent/QSemN.hs
libraries/base/Control/Concurrent/QSemN.hs
+122
-0
libraries/base/Control/Exception.hs
libraries/base/Control/Exception.hs
+393
-0
libraries/base/Control/Exception/Base.hs
libraries/base/Control/Exception/Base.hs
+422
-0
libraries/base/Control/Monad.hs
libraries/base/Control/Monad.hs
+285
-0
libraries/base/Control/Monad/Fail.hs
libraries/base/Control/Monad/Fail.hs
+78
-0
libraries/base/Control/Monad/Fix.hs
libraries/base/Control/Monad/Fix.hs
+123
-0
libraries/base/Control/Monad/IO/Class.hs
libraries/base/Control/Monad/IO/Class.hs
+36
-0
libraries/base/Control/Monad/Instances.hs
libraries/base/Control/Monad/Instances.hs
+19
-0
libraries/base/Control/Monad/ST.hs
libraries/base/Control/Monad/ST.hs
+35
-0
libraries/base/Control/Monad/ST/Imp.hs
libraries/base/Control/Monad/ST/Imp.hs
+38
-0
libraries/base/Control/Monad/ST/Lazy.hs
libraries/base/Control/Monad/ST/Lazy.hs
+34
-0
libraries/base/Control/Monad/ST/Lazy/Imp.hs
libraries/base/Control/Monad/ST/Lazy/Imp.hs
+149
-0
libraries/base/Control/Monad/ST/Lazy/Safe.hs
libraries/base/Control/Monad/ST/Lazy/Safe.hs
+36
-0
libraries/base/Control/Monad/ST/Lazy/Unsafe.hs
libraries/base/Control/Monad/ST/Lazy/Unsafe.hs
+28
-0
libraries/base/Control/Monad/ST/Safe.hs
libraries/base/Control/Monad/ST/Safe.hs
+33
-0
libraries/base/Control/Monad/ST/Strict.hs
libraries/base/Control/Monad/ST/Strict.hs
+22
-0
libraries/base/Control/Monad/ST/Unsafe.hs
libraries/base/Control/Monad/ST/Unsafe.hs
+29
-0
libraries/base/Control/Monad/Zip.hs
libraries/base/Control/Monad/Zip.hs
+99
-0
libraries/base/Data/Bifunctor.hs
libraries/base/Data/Bifunctor.hs
+105
-0
libraries/base/Data/Bits.hs
libraries/base/Data/Bits.hs
+659
-0
libraries/base/Data/Bool.hs
libraries/base/Data/Bool.hs
+61
-0
libraries/base/Data/Char.hs
libraries/base/Data/Char.hs
+290
-0
libraries/base/Data/Coerce.hs
libraries/base/Data/Coerce.hs
+29
-0
libraries/base/Data/Complex.hs
libraries/base/Data/Complex.hs
+231
-0
libraries/base/Data/Data.hs
libraries/base/Data/Data.hs
+1818
-0
libraries/base/Data/Dynamic.hs
libraries/base/Data/Dynamic.hs
+144
-0
libraries/base/Data/Either.hs
libraries/base/Data/Either.hs
+295
-0
libraries/base/Data/Eq.hs
libraries/base/Data/Eq.hs
+22
-0
libraries/base/Data/Fixed.hs
libraries/base/Data/Fixed.hs
+208
-0
libraries/base/Data/Foldable.hs
libraries/base/Data/Foldable.hs
+623
-0
libraries/base/Data/Function.hs
libraries/base/Data/Function.hs
+100
-0
libraries/base/Data/Functor.hs
libraries/base/Data/Functor.hs
+152
-0
libraries/base/Data/Functor/Classes.hs
libraries/base/Data/Functor/Classes.hs
+490
-0
libraries/base/Data/Functor/Compose.hs
libraries/base/Data/Functor/Compose.hs
+94
-0
libraries/base/Data/Functor/Const.hs
libraries/base/Data/Functor/Const.hs
+69
-0
libraries/base/Data/Functor/Identity.hs
libraries/base/Data/Functor/Identity.hs
+111
-0
libraries/base/Data/Functor/Product.hs
libraries/base/Data/Functor/Product.hs
+97
-0
libraries/base/Data/Functor/Sum.hs
libraries/base/Data/Functor/Sum.hs
+77
-0
libraries/base/Data/IORef.hs
libraries/base/Data/IORef.hs
+155
-0
libraries/base/Data/Int.hs
libraries/base/Data/Int.hs
+55
-0
libraries/base/Data/Ix.hs
libraries/base/Data/Ix.hs
+64
-0
libraries/base/Data/Kind.hs
libraries/base/Data/Kind.hs
+19
-0
libraries/base/Data/List.hs
libraries/base/Data/List.hs
+242
-0
libraries/base/Data/List/NonEmpty.hs
libraries/base/Data/List/NonEmpty.hs
+490
-0
libraries/base/Data/Maybe.hs
libraries/base/Data/Maybe.hs
+300
-0
libraries/base/Data/Monoid.hs
libraries/base/Data/Monoid.hs
+237
-0
libraries/base/Data/OldList.hs
libraries/base/Data/OldList.hs
+1193
-0
libraries/base/Data/Ord.hs
libraries/base/Data/Ord.hs
+52
-0
libraries/base/Data/Proxy.hs
libraries/base/Data/Proxy.hs
+110
-0
libraries/base/Data/Ratio.hs
libraries/base/Data/Ratio.hs
+73
-0
libraries/base/Data/STRef.hs
libraries/base/Data/STRef.hs
+54
-0
libraries/base/Data/STRef/Lazy.hs
libraries/base/Data/STRef/Lazy.hs
+38
-0
libraries/base/Data/STRef/Strict.hs
libraries/base/Data/STRef/Strict.hs
+22
-0
libraries/base/Data/Semigroup.hs
libraries/base/Data/Semigroup.hs
+634
-0
libraries/base/Data/String.hs
libraries/base/Data/String.hs
+83
-0
libraries/base/Data/Traversable.hs
libraries/base/Data/Traversable.hs
+333
-0
libraries/base/Data/Tuple.hs
libraries/base/Data/Tuple.hs
+51
-0
libraries/base/Data/Type/Bool.hs
libraries/base/Data/Type/Bool.hs
+55
-0
libraries/base/Data/Type/Coercion.hs
libraries/base/Data/Type/Coercion.hs
+99
-0
libraries/base/Data/Type/Equality.hs
libraries/base/Data/Type/Equality.hs
+304
-0
libraries/base/Data/Typeable.hs
libraries/base/Data/Typeable.hs
+131
-0
libraries/base/Data/Typeable/Internal.hs
libraries/base/Data/Typeable/Internal.hs
+425
-0
libraries/base/Data/Unique.hs
libraries/base/Data/Unique.hs
+71
-0
libraries/base/Data/Version.hs
libraries/base/Data/Version.hs
+132
-0
libraries/base/Data/Void.hs
libraries/base/Data/Void.hs
+73
-0
libraries/base/Data/Word.hs
libraries/base/Data/Word.hs
+60
-0
libraries/base/Debug/Trace.hs
libraries/base/Debug/Trace.hs
+295
-0
libraries/base/Foreign.hs
libraries/base/Foreign.hs
+38
-0
libraries/base/Foreign/C.hs
libraries/base/Foreign/C.hs
+27
-0
libraries/base/Foreign/C/Error.hs
libraries/base/Foreign/C/Error.hs
+575
-0
libraries/base/Foreign/C/String.hs
libraries/base/Foreign/C/String.hs
+459
-0
libraries/base/Foreign/C/Types.hs
libraries/base/Foreign/C/Types.hs
+258
-0
libraries/base/Foreign/Concurrent.hs
libraries/base/Foreign/Concurrent.hs
+51
-0
libraries/base/Foreign/ForeignPtr.hs
libraries/base/Foreign/ForeignPtr.hs
+47
-0
libraries/base/Foreign/ForeignPtr/Imp.hs
libraries/base/Foreign/ForeignPtr/Imp.hs
+120
-0
libraries/base/Foreign/ForeignPtr/Safe.hs
libraries/base/Foreign/ForeignPtr/Safe.hs
+49
-0
libraries/base/Foreign/ForeignPtr/Unsafe.hs
libraries/base/Foreign/ForeignPtr/Unsafe.hs
+28
-0
libraries/base/Foreign/Marshal.hs
libraries/base/Foreign/Marshal.hs
+34
-0
libraries/base/Foreign/Marshal/Alloc.hs
libraries/base/Foreign/Marshal/Alloc.hs
+226
-0
libraries/base/Foreign/Marshal/Array.hs
libraries/base/Foreign/Marshal/Array.hs
+280
-0
libraries/base/Foreign/Marshal/Error.hs
libraries/base/Foreign/Marshal/Error.hs
+78
-0
libraries/base/Foreign/Marshal/Pool.hs
libraries/base/Foreign/Marshal/Pool.hs
+198
-0
libraries/base/Foreign/Marshal/Safe.hs
libraries/base/Foreign/Marshal/Safe.hs
+36
-0
libraries/base/Foreign/Marshal/Unsafe.hs
libraries/base/Foreign/Marshal/Unsafe.hs
+45
-0
libraries/base/Foreign/Marshal/Utils.hs
libraries/base/Foreign/Marshal/Utils.hs
+187
-0
libraries/base/Foreign/Ptr.hs
libraries/base/Foreign/Ptr.hs
+99
-0
libraries/base/Foreign/Safe.hs
libraries/base/Foreign/Safe.hs
+40
-0
libraries/base/Foreign/StablePtr.hs
libraries/base/Foreign/StablePtr.hs
+47
-0
libraries/base/Foreign/Storable.hs
libraries/base/Foreign/Storable.hs
+260
-0
libraries/base/GHC/Arr.hs
libraries/base/GHC/Arr.hs
+901
-0
libraries/base/GHC/Base.hs
libraries/base/GHC/Base.hs
+1224
-0
libraries/base/GHC/Char.hs
libraries/base/GHC/Char.hs
+22
-0
libraries/base/GHC/Conc.hs
libraries/base/GHC/Conc.hs
+119
-0
libraries/base/GHC/Conc/IO.hs
libraries/base/GHC/Conc/IO.hs
+203
-0
libraries/base/GHC/Conc/Signal.hs
libraries/base/GHC/Conc/Signal.hs
+99
-0
libraries/base/GHC/Conc/Sync.hs
libraries/base/GHC/Conc/Sync.hs
+894
-0
libraries/base/GHC/Conc/Windows.hs
libraries/base/GHC/Conc/Windows.hs
+337
-0
libraries/base/GHC/ConsoleHandler.hs
libraries/base/GHC/ConsoleHandler.hs
+162
-0
libraries/base/GHC/Constants.hs
libraries/base/GHC/Constants.hs
+10
-0
libraries/base/GHC/Desugar.hs
libraries/base/GHC/Desugar.hs
+41
-0
libraries/base/GHC/Enum.hs
libraries/base/GHC/Enum.hs
+768
-0
libraries/base/GHC/Environment.hs
libraries/base/GHC/Environment.hs
+66
-0
libraries/base/GHC/Err.hs
libraries/base/GHC/Err.hs
+84
-0
libraries/base/GHC/Event.hs
libraries/base/GHC/Event.hs
+46
-0
libraries/base/GHC/Event/Arr.hs
libraries/base/GHC/Event/Arr.hs
+32
-0
libraries/base/GHC/Event/Array.hs
libraries/base/GHC/Event/Array.hs
+312
-0
libraries/base/GHC/Event/Clock.hsc
libraries/base/GHC/Event/Clock.hsc
+17
-0
libraries/base/GHC/Event/Control.hs
libraries/base/GHC/Event/Control.hs
+210
-0
libraries/base/GHC/Event/EPoll.hsc
libraries/base/GHC/Event/EPoll.hsc
+239
-0
libraries/base/GHC/Event/IntTable.hs
libraries/base/GHC/Event/IntTable.hs
+144
-0
libraries/base/GHC/Event/Internal.hs
libraries/base/GHC/Event/Internal.hs
+209
-0
libraries/base/GHC/Event/KQueue.hsc
libraries/base/GHC/Event/KQueue.hsc
+294
-0
libraries/base/GHC/Event/Manager.hs
libraries/base/GHC/Event/Manager.hs
+520
-0
libraries/base/GHC/Event/PSQ.hs
libraries/base/GHC/Event/PSQ.hs
+484
-0
libraries/base/GHC/Event/Poll.hsc
libraries/base/GHC/Event/Poll.hsc
+211
-0
libraries/base/GHC/Event/Thread.hs
libraries/base/GHC/Event/Thread.hs
+362
-0
libraries/base/GHC/Event/TimerManager.hs
libraries/base/GHC/Event/TimerManager.hs
+243
-0
libraries/base/GHC/Event/Unique.hs
libraries/base/GHC/Event/Unique.hs
+43
-0
libraries/base/GHC/Exception.hs
libraries/base/GHC/Exception.hs
+252
-0
libraries/base/GHC/Exception.hs-boot
libraries/base/GHC/Exception.hs-boot
+38
-0
libraries/base/GHC/ExecutionStack.hs
libraries/base/GHC/ExecutionStack.hs
+50
-0
libraries/base/GHC/ExecutionStack/Internal.hsc
libraries/base/GHC/ExecutionStack/Internal.hsc
+238
-0
libraries/base/GHC/Exts.hs
libraries/base/GHC/Exts.hs
+202
-0
libraries/base/GHC/Fingerprint.hs
libraries/base/GHC/Fingerprint.hs
+114
-0
libraries/base/GHC/Fingerprint.hs-boot
libraries/base/GHC/Fingerprint.hs-boot
+14
-0
libraries/base/GHC/Fingerprint/Type.hs
libraries/base/GHC/Fingerprint/Type.hs
+33
-0
libraries/base/GHC/Float.hs
libraries/base/GHC/Float.hs
+1241
-0
libraries/base/GHC/Float/ConversionUtils.hs
libraries/base/GHC/Float/ConversionUtils.hs
+100
-0
libraries/base/GHC/Float/RealFracMethods.hs
libraries/base/GHC/Float/RealFracMethods.hs
+342
-0
libraries/base/GHC/Foreign.hs
libraries/base/GHC/Foreign.hs
+255
-0
libraries/base/GHC/ForeignPtr.hs
libraries/base/GHC/ForeignPtr.hs
+445
-0
libraries/base/GHC/GHCi.hs
libraries/base/GHC/GHCi.hs
+49
-0
libraries/base/GHC/Generics.hs
libraries/base/GHC/Generics.hs
+1262
-0
libraries/base/GHC/IO.hs
libraries/base/GHC/IO.hs
+414
-0
libraries/base/GHC/IO.hs-boot
libraries/base/GHC/IO.hs-boot
+9
-0
libraries/base/GHC/IO/Buffer.hs
libraries/base/GHC/IO/Buffer.hs
+291
-0
libraries/base/GHC/IO/BufferedIO.hs
libraries/base/GHC/IO/BufferedIO.hs
+126
-0
libraries/base/GHC/IO/Device.hs
libraries/base/GHC/IO/Device.hs
+170
-0
libraries/base/GHC/IO/Encoding.hs
libraries/base/GHC/IO/Encoding.hs
+290
-0
libraries/base/GHC/IO/Encoding.hs-boot
libraries/base/GHC/IO/Encoding.hs-boot
+10
-0
libraries/base/GHC/IO/Encoding/CodePage.hs
libraries/base/GHC/IO/Encoding/CodePage.hs
+184
-0
libraries/base/GHC/IO/Encoding/CodePage/API.hs
libraries/base/GHC/IO/Encoding/CodePage/API.hs
+428
-0
libraries/base/GHC/IO/Encoding/CodePage/Table.hs
libraries/base/GHC/IO/Encoding/CodePage/Table.hs
+432
-0
libraries/base/GHC/IO/Encoding/Failure.hs
libraries/base/GHC/IO/Encoding/Failure.hs
+203
-0
libraries/base/GHC/IO/Encoding/Iconv.hs
libraries/base/GHC/IO/Encoding/Iconv.hs
+201
-0
libraries/base/GHC/IO/Encoding/Latin1.hs
libraries/base/GHC/IO/Encoding/Latin1.hs
+230
-0
libraries/base/GHC/IO/Encoding/Types.hs
libraries/base/GHC/IO/Encoding/Types.hs
+132
-0
libraries/base/GHC/IO/Encoding/UTF16.hs
libraries/base/GHC/IO/Encoding/UTF16.hs
+359
-0
libraries/base/GHC/IO/Encoding/UTF32.hs
libraries/base/GHC/IO/Encoding/UTF32.hs
+336
-0
libraries/base/GHC/IO/Encoding/UTF8.hs
libraries/base/GHC/IO/Encoding/UTF8.hs
+362
-0
libraries/base/GHC/IO/Exception.hs
libraries/base/GHC/IO/Exception.hs
+396
-0
libraries/base/GHC/IO/Exception.hs-boot
libraries/base/GHC/IO/Exception.hs-boot
+15
-0
libraries/base/GHC/IO/FD.hs
libraries/base/GHC/IO/FD.hs
+674
-0
libraries/base/GHC/IO/Handle.hs
libraries/base/GHC/IO/Handle.hs
+743
-0
libraries/base/GHC/IO/Handle.hs-boot
libraries/base/GHC/IO/Handle.hs-boot
+10
-0
libraries/base/GHC/IO/Handle/FD.hs
libraries/base/GHC/IO/Handle/FD.hs
+291
-0
libraries/base/GHC/IO/Handle/FD.hs-boot
libraries/base/GHC/IO/Handle/FD.hs-boot
+10
-0
libraries/base/GHC/IO/Handle/Internals.hs
libraries/base/GHC/IO/Handle/Internals.hs
+949
-0
libraries/base/GHC/IO/Handle/Text.hs
libraries/base/GHC/IO/Handle/Text.hs
+1006
-0
libraries/base/GHC/IO/Handle/Types.hs
libraries/base/GHC/IO/Handle/Types.hs
+426
-0
libraries/base/GHC/IO/IOMode.hs
libraries/base/GHC/IO/IOMode.hs
+30
-0
libraries/base/GHC/IO/Unsafe.hs
libraries/base/GHC/IO/Unsafe.hs
+180
-0
libraries/base/GHC/IOArray.hs
libraries/base/GHC/IOArray.hs
+76
-0
libraries/base/GHC/IORef.hs
libraries/base/GHC/IORef.hs
+53
-0
libraries/base/GHC/Int.hs
libraries/base/GHC/Int.hs
+1151
-0
libraries/base/GHC/List.hs
libraries/base/GHC/List.hs
+1002
-0
libraries/base/GHC/MVar.hs
libraries/base/GHC/MVar.hs
+181
-0
libraries/base/GHC/Natural.hs
libraries/base/GHC/Natural.hs
+636
-0
libraries/base/GHC/Num.hs
libraries/base/GHC/Num.hs
+99
-0
libraries/base/GHC/OldList.hs
libraries/base/GHC/OldList.hs
+29
-0
libraries/base/GHC/OverloadedLabels.hs
libraries/base/GHC/OverloadedLabels.hs
+48
-0
libraries/base/GHC/PArr.hs
libraries/base/GHC/PArr.hs
+37
-0
libraries/base/GHC/Pack.hs
libraries/base/GHC/Pack.hs
+101
-0
libraries/base/GHC/Profiling.hs
libraries/base/GHC/Profiling.hs
+10
-0
libraries/base/GHC/Ptr.hs
libraries/base/GHC/Ptr.hs
+174
-0
libraries/base/GHC/RTS/Flags.hsc
libraries/base/GHC/RTS/Flags.hsc
+457
-0
libraries/base/GHC/Read.hs
libraries/base/GHC/Read.hs
+652
-0
libraries/base/GHC/Real.hs
libraries/base/GHC/Real.hs
+662
-0
libraries/base/GHC/ST.hs
libraries/base/GHC/ST.hs
+112
-0
libraries/base/GHC/STRef.hs
libraries/base/GHC/STRef.hs
+49
-0
libraries/base/GHC/Show.hs
libraries/base/GHC/Show.hs
+523
-0
libraries/base/GHC/Stable.hs
libraries/base/GHC/Stable.hs
+108
-0
libraries/base/GHC/Stack.hs
libraries/base/GHC/Stack.hs
+101
-0
libraries/base/GHC/Stack/CCS.hs-boot
libraries/base/GHC/Stack/CCS.hs-boot
+16
-0
libraries/base/GHC/Stack/CCS.hsc
libraries/base/GHC/Stack/CCS.hsc
+120
-0
libraries/base/GHC/Stack/Types.hs
libraries/base/GHC/Stack/Types.hs
+217
-0
libraries/base/GHC/StaticPtr.hs
libraries/base/GHC/StaticPtr.hs
+122
-0
libraries/base/GHC/Stats.hsc
libraries/base/GHC/Stats.hsc
+173
-0
libraries/base/GHC/Storable.hs
libraries/base/GHC/Storable.hs
+158
-0
libraries/base/GHC/TopHandler.hs
libraries/base/GHC/TopHandler.hs
+254
-0
libraries/base/GHC/TypeLits.hs
libraries/base/GHC/TypeLits.hs
+286
-0
libraries/base/GHC/Unicode.hs
libraries/base/GHC/Unicode.hs
+397
-0
libraries/base/GHC/Weak.hs
libraries/base/GHC/Weak.hs
+156
-0
libraries/base/GHC/Windows.hs
libraries/base/GHC/Windows.hs
+196
-0
libraries/base/GHC/Word.hs
libraries/base/GHC/Word.hs
+941
-0
libraries/base/LICENSE
libraries/base/LICENSE
+83
-0
libraries/base/Numeric.hs
libraries/base/Numeric.hs
+232
-0
libraries/base/Numeric/Natural.hs
libraries/base/Numeric/Natural.hs
+24
-0
No files found.
Too many changes to show.
Plain diff
Email patch
To preserve performance only
208 of 208+
files are displayed.
app/Main.hs
View file @
70a4766e
...
...
@@ -22,7 +22,6 @@ import System.Environment (getArgs)
import
System.Exit
(
exitFailure
)
import
qualified
Data.Sequence
as
Seq
import
qualified
Data.Map.Strict
as
M
import
System.Directory
(
listDirectory
)
import
qualified
Language.Haskell.GHC.Simple
as
GHC.Simple
import
Language.Haskell.GHC.Simple.Extra
()
...
...
@@ -35,6 +34,8 @@ import Mu.AST
import
Mu.Impl.RefImpl2
import
Mu.Interface
import
Debug.Trace
compilerConfig
::
CompConfig
compilerConfig
=
GHC
.
Simple
.
disableCodeGen
$
...
...
@@ -49,26 +50,27 @@ main :: IO ()
main
=
do
inputFiles
<-
getArgs
b
<-
GHC
.
Simple
.
compileWith
compilerConfig
compileMu
inputFiles
libresults
<-
compileL
ibraryFiles
libresults
<-
mapM
compileLibraryFiles
l
ibraryFiles
case
b
of
Success
results
_
_
->
do
doResults
lives
$
mergeResults
$
(
loadPrim
:
libresults
++
results'
)
doResults
lives
$
mergeResults
$
(
loadPrim
:
concat
libresults
++
results'
)
where
results'
=
fmap
modCompiledModule
(
results
)
lives
=
toList
$
foldMap
getDefns
results'
getDefns
(
defns
,
_
,
_
)
=
fmap
toName
defns
Failure
_
_
->
exitFailure
compileLibraryFiles
::
IO
[
MuResult
]
compileLibraryFiles
=
do
b
<-
getLibraryFiles
>>=
GHC
.
Simple
.
compileWith
libconfig
compileMu
compileLibraryFiles
::
(
String
,
[
FilePath
])
->
IO
[
MuResult
]
compileLibraryFiles
(
packageKey
,
files
)
=
do
traceM
(
"Compiling the library file "
++
packageKey
)
b
<-
GHC
.
Simple
.
compileWith
libconfig
compileMu
files
case
b
of
Success
results
_
_
->
return
$
fmap
modCompiledModule
results
Failure
_
_
->
error
"Could not compile internal bundle"
where
libconfig
=
compilerConfig
{
cfgGhcFlags
=
[
"-this-unit-id"
,
"ghc-prim"
,
"-ddump-stg"
,
"-ddump-to-file"
]
[
"-this-unit-id"
,
packageKey
,
"-ddump-stg"
,
"-ddump-to-file"
]
}
doResults
::
[
Name
]
->
MuMergedResult
->
IO
()
...
...
@@ -93,12 +95,222 @@ doResults liveObjectNames (defns, topClosures, mainFunction) = do
where
defns'
=
M
.
elems
defns
getLibraryFiles
::
IO
[
FilePath
]
getLibraryFiles
=
process
=<<
mapM
listDirectory'
[
"/Users/nathan/projects/microvm/anuhc/anuhc-prim/GHC/"
]
-- | A list of all library files, indexed by their package-key.
-- TODO: fix this.
libraryFiles
::
[(
String
,
[
FilePath
])]
libraryFiles
=
[
(
"ghc-prim"
,
prefix
ghcPrimFiles
)
,
(
"base"
,
prefix
baseFiles
)
]
where
process
=
return
.
(
filter
(
".hs"
`
isSuffixOf
`)
.
concat
)
listDirectory'
dir
=
listDirectory
dir
>>=
return
.
(
fmap
(
dir
++
))
prefix
=
fmap
(
"/Users/nathan/projects/microvm/anuhc/libraries/"
++
)
ghcPrimFiles
=
[
"ghc-prim/GHC/CString.hs"
,
"ghc-prim/GHC/Classes.hs"
,
"ghc-prim/GHC/Debug.hs"
,
"ghc-prim/GHC/IntWord64.hs"
,
"ghc-prim/GHC/Magic.hs"
-- , "ghc-prim/GHC/PrimopWrappers.hs"
,
"ghc-prim/GHC/Tuple.hs"
,
"ghc-prim/GHC/Types.hs"
]
baseFiles
=
[
"base/Control/Applicative.hs"
,
"base/Control/Arrow.hs"
,
"base/Control/Category.hs"
,
"base/Control/Concurrent.hs"
,
"base/Control/Concurrent/Chan.hs"
,
"base/Control/Concurrent/MVar.hs"
,
"base/Control/Concurrent/QSem.hs"
,
"base/Control/Concurrent/QSemN.hs"
,
"base/Control/Exception.hs"
,
"base/Control/Exception/Base.hs"
,
"base/Control/Monad.hs"
,
"base/Control/Monad/Fail.hs"
,
"base/Control/Monad/Fix.hs"
,
"base/Control/Monad/Instances.hs"
,
"base/Control/Monad/IO/Class.hs"
,
"base/Control/Monad/ST.hs"
,
"base/Control/Monad/ST/Lazy.hs"
,
"base/Control/Monad/ST/Lazy/Safe.hs"
,
"base/Control/Monad/ST/Lazy/Unsafe.hs"
,
"base/Control/Monad/ST/Safe.hs"
,
"base/Control/Monad/ST/Strict.hs"
,
"base/Control/Monad/ST/Unsafe.hs"
,
"base/Control/Monad/Zip.hs"
,
"base/Data/Bifunctor.hs"
,
"base/Data/Bits.hs"
,
"base/Data/Bool.hs"
,
"base/Data/Char.hs"
,
"base/Data/Coerce.hs"
,
"base/Data/Complex.hs"
,
"base/Data/Data.hs"
,
"base/Data/Dynamic.hs"
,
"base/Data/Either.hs"
,
"base/Data/Eq.hs"
,
"base/Data/Fixed.hs"
,
"base/Data/Foldable.hs"
,
"base/Data/Function.hs"
,
"base/Data/Functor.hs"
,
"base/Data/Functor/Classes.hs"
,
"base/Data/Functor/Compose.hs"
,
"base/Data/Functor/Const.hs"
,
"base/Data/Functor/Identity.hs"
,
"base/Data/Functor/Product.hs"
,
"base/Data/Functor/Sum.hs"
,
"base/Data/IORef.hs"
,
"base/Data/Int.hs"
,
"base/Data/Ix.hs"
,
"base/Data/Kind.hs"
,
"base/Data/List.hs"
,
"base/Data/List/NonEmpty.hs"
,
"base/Data/Maybe.hs"
,
"base/Data/Monoid.hs"
,
"base/Data/Ord.hs"
,
"base/Data/Proxy.hs"
,
"base/Data/Ratio.hs"
,
"base/Data/Semigroup.hs"
,
"base/Data/STRef.hs"
,
"base/Data/STRef/Lazy.hs"
,
"base/Data/STRef/Strict.hs"
,
"base/Data/String.hs"
,
"base/Data/Traversable.hs"
,
"base/Data/Tuple.hs"
,
"base/Data/Type/Bool.hs"
,
"base/Data/Type/Coercion.hs"
,
"base/Data/Type/Equality.hs"
,
"base/Data/Typeable.hs"
,
"base/Data/Typeable/Internal.hs"
,
"base/Data/Unique.hs"
,
"base/Data/Version.hs"
,
"base/Data/Void.hs"
,
"base/Data/Word.hs"
,
"base/Debug/Trace.hs"
,
"base/Foreign.hs"
,
"base/Foreign/C.hs"
,
"base/Foreign/C/Error.hs"
,
"base/Foreign/C/String.hs"
,
"base/Foreign/C/Types.hs"
,
"base/Foreign/Concurrent.hs"
,
"base/Foreign/ForeignPtr.hs"
,
"base/Foreign/ForeignPtr/Safe.hs"
,
"base/Foreign/ForeignPtr/Unsafe.hs"
,
"base/Foreign/Marshal.hs"
,
"base/Foreign/Marshal/Alloc.hs"
,
"base/Foreign/Marshal/Array.hs"
,
"base/Foreign/Marshal/Error.hs"
,
"base/Foreign/Marshal/Pool.hs"
,
"base/Foreign/Marshal/Safe.hs"
,
"base/Foreign/Marshal/Unsafe.hs"
,
"base/Foreign/Marshal/Utils.hs"
,
"base/Foreign/Ptr.hs"
,
"base/Foreign/Safe.hs"
,
"base/Foreign/StablePtr.hs"
,
"base/Foreign/Storable.hs"
,
"base/GHC/Arr.hs"
,
"base/GHC/Base.hs"
,
"base/GHC/Char.hs"
,
"base/GHC/Conc.hs"
,
"base/GHC/Conc/IO.hs"
,
"base/GHC/Conc/Signal.hs"
,
"base/GHC/Conc/Sync.hs"
,
"base/GHC/ConsoleHandler.hs"
,
"base/GHC/Constants.hs"
,
"base/GHC/Desugar.hs"
,
"base/GHC/Enum.hs"
,
"base/GHC/Environment.hs"
,
"base/GHC/Err.hs"
,
"base/GHC/Exception.hs"
,
"base/GHC/ExecutionStack.hs"
,
"base/GHC/ExecutionStack/Internal.hs"
,
"base/GHC/Exts.hs"
,
"base/GHC/Fingerprint.hs"
,
"base/GHC/Fingerprint/Type.hs"
,
"base/GHC/Float.hs"
,
"base/GHC/Float/ConversionUtils.hs"
,
"base/GHC/Float/RealFracMethods.hs"
,
"base/GHC/Foreign.hs"
,
"base/GHC/ForeignPtr.hs"
,
"base/GHC/GHCi.hs"
,
"base/GHC/Generics.hs"
,
"base/GHC/IO.hs"
,
"base/GHC/IO/Buffer.hs"
,
"base/GHC/IO/BufferedIO.hs"
,
"base/GHC/IO/Device.hs"
,
"base/GHC/IO/Encoding.hs"
,
"base/GHC/IO/Encoding/CodePage.hs"
,
"base/GHC/IO/Encoding/Failure.hs"
,
"base/GHC/IO/Encoding/Iconv.hs"
,
"base/GHC/IO/Encoding/Latin1.hs"
,
"base/GHC/IO/Encoding/Types.hs"
,
"base/GHC/IO/Encoding/UTF16.hs"
,
"base/GHC/IO/Encoding/UTF32.hs"
,
"base/GHC/IO/Encoding/UTF8.hs"
,
"base/GHC/IO/Exception.hs"
,
"base/GHC/IO/FD.hs"
,
"base/GHC/IO/Handle.hs"
,
"base/GHC/IO/Handle/FD.hs"
,
"base/GHC/IO/Handle/Internals.hs"
,
"base/GHC/IO/Handle/Text.hs"
,
"base/GHC/IO/Handle/Types.hs"
,
"base/GHC/IO/IOMode.hs"
,
"base/GHC/IO/Unsafe.hs"
,
"base/GHC/IOArray.hs"
,
"base/GHC/IORef.hs"
,
"base/GHC/Int.hs"
,
"base/GHC/List.hs"
,
"base/GHC/MVar.hs"
,
"base/GHC/Natural.hs"
,
"base/GHC/Num.hs"
,
"base/GHC/OldList.hs"
,
"base/GHC/OverloadedLabels.hs"
,
"base/GHC/PArr.hs"
,
"base/GHC/Pack.hs"
,
"base/GHC/Profiling.hs"
,
"base/GHC/Ptr.hs"
,
"base/GHC/Read.hs"
,
"base/GHC/Real.hs"
,
"base/GHC/RTS/Flags.hs"
,
"base/GHC/ST.hs"
,
"base/GHC/StaticPtr.hs"
,
"base/GHC/STRef.hs"
,
"base/GHC/Show.hs"
,
"base/GHC/Stable.hs"
,
"base/GHC/Stack.hs"
,
"base/GHC/Stack/CCS.hs"
,
"base/GHC/Stack/Types.hs"
,
"base/GHC/Stats.hs"
,
"base/GHC/Storable.hs"
,
"base/GHC/TopHandler.hs"
,
"base/GHC/TypeLits.hs"
,
"base/GHC/Unicode.hs"
,
"base/GHC/Weak.hs"
,
"base/GHC/Word.hs"
,
"base/Numeric.hs"
,
"base/Numeric/Natural.hs"
,
"base/Prelude.hs"
,
"base/System/CPUTime.hs"
,
"base/System/Console/GetOpt.hs"
,
"base/System/Environment.hs"
,
"base/System/Exit.hs"
,
"base/System/IO.hs"
,
"base/System/IO/Error.hs"
,
"base/System/IO/Unsafe.hs"
,
"base/System/Info.hs"
,
"base/System/Mem.hs"
,
"base/System/Mem/StableName.hs"
,
"base/System/Mem/Weak.hs"
,
"base/System/Posix/Internals.hs"
,
"base/System/Posix/Types.hs"
,
"base/System/Timeout.hs"
,
"base/Text/ParserCombinators/ReadP.hs"
,
"base/Text/ParserCombinators/ReadPrec.hs"
,
"base/Text/Printf.hs"
,
"base/Text/Read.hs"
,
"base/Text/Read/Lex.hs"
,
"base/Text/Show.hs"
,
"base/Text/Show/Functions.hs"
,
"base/Unsafe/Coerce.hs"
]
-- printResult :: CompResult String -> IO ()
-- printResult result = do putStrLn errors
...
...
libraries/base/.authorspellings
0 → 100644
View file @
70a4766e
Simon Marlow <marlowsd@gmail.com>, simonmar, simonmar@microsoft.com
Ross Paterson <ross@soi.city.ac.uk>, ross
Sven Panne <sven.panne@aedion.de>, panne
Malcolm Wallace <Malcolm.Wallace@cs.york.ac.uk>, malcolm
Simon Peyton Jones <simonpj@microsoft.com>, simonpj
Don Stewart <dons@galois.com>, dons
Tim Harris <tharris@microsoft.com>, tharris
Lennart Augustsson <lennart@augustsson.net>, lennart.augustsson@credit-suisse.com
Duncan Coutts <duncan@haskell.org>, duncan.coutts@worc.ox.ac.uk, duncan@well-typed.com
Ben Lippmeier <benl@ouroborus.net>, benl@cse.unsw.edu.au, Ben.Lippmeier@anu.edu.au
Manuel M T Chakravarty <chak@cse.unsw.edu.au>, chak
Jose Pedro Magalhaes <jpm@cs.uu.nl>, jpm@cs.uu.nl
libraries/base/.gitignore
0 → 100644
View file @
70a4766e
*.o
*.aux
*.hi
*.tix
*.exe
# Backup files
*~
# Specific generated files
/GNUmakefile
/autom4te.cache/
/base.buildinfo
/config.log
/config.status
/configure
/dist-install/
/ghc.mk
/include/EventConfig.h
/include/HsBaseConfig.h
/include/HsBaseConfig.h.in
libraries/base/Control/Applicative.hs
0 → 100644
View file @
70a4766e
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE NoImplicitPrelude #-}
-----------------------------------------------------------------------------
-- |
-- Module : Control.Applicative
-- Copyright : Conor McBride and Ross Paterson 2005
-- License : BSD-style (see the LICENSE file in the distribution)
--
-- Maintainer : libraries@haskell.org
-- Stability : experimental
-- Portability : portable
--
-- This module describes a structure intermediate between a functor and
-- a monad (technically, a strong lax monoidal functor). Compared with
-- monads, this interface lacks the full power of the binding operation
-- '>>=', but
--
-- * it has more instances.
--
-- * it is sufficient for many uses, e.g. context-free parsing, or the
-- 'Data.Traversable.Traversable' class.
--
-- * instances can perform analysis of computations before they are
-- executed, and thus produce shared optimizations.
--
-- This interface was introduced for parsers by Niklas Röjemo, because
-- it admits more sharing than the monadic interface. The names here are
-- mostly based on parsing work by Doaitse Swierstra.
--
-- For more details, see
-- <http://www.soi.city.ac.uk/~ross/papers/Applicative.html Applicative Programming with Effects>,
-- by Conor McBride and Ross Paterson.
module
Control.Applicative
(
-- * Applicative functors
Applicative
(
..
),
-- * Alternatives
Alternative
(
..
),
-- * Instances
Const
(
..
),
WrappedMonad
(
..
),
WrappedArrow
(
..
),
ZipList
(
..
),
-- * Utility functions
(
<$>
),
(
<$
),
(
<**>
),
liftA
,
liftA2
,
liftA3
,
optional
,
)
where
import
Control.Category
hiding
((
.
),
id
)
import
Control.Arrow
import
Data.Maybe
import
Data.Tuple
import
Data.Eq
import
Data.Ord
import
Data.Foldable
(
Foldable
(
..
))
import
Data.Functor
((
<$>
))
import
Data.Functor.Const
(
Const
(
..
))
import
GHC.Base
import
GHC.Generics
import
GHC.List
(
repeat
,
zipWith
)
import
GHC.Read
(
Read
)
import
GHC.Show
(
Show
)
newtype
WrappedMonad
m
a
=
WrapMonad
{
unwrapMonad
::
m
a
}
deriving
(
Generic
,
Generic1
,
Monad
)
instance
Monad
m
=>
Functor
(
WrappedMonad
m
)
where
fmap
f
(
WrapMonad
v
)
=
WrapMonad
(
liftM
f
v
)
instance
Monad
m
=>
Applicative
(
WrappedMonad
m
)
where
pure
=
WrapMonad
.
pure
WrapMonad
f
<*>
WrapMonad
v
=
WrapMonad
(
f
`
ap
`
v
)
instance
MonadPlus
m
=>
Alternative
(
WrappedMonad
m
)
where
empty
=
WrapMonad
mzero
WrapMonad
u
<|>
WrapMonad
v
=
WrapMonad
(
u
`
mplus
`
v
)
newtype
WrappedArrow
a
b
c
=
WrapArrow
{
unwrapArrow
::
a
b
c
}
deriving
(
Generic
,
Generic1
)
instance
Arrow
a
=>
Functor
(
WrappedArrow
a
b
)
where
fmap
f
(
WrapArrow
a
)
=
WrapArrow
(
a
>>>
arr
f
)
instance
Arrow
a
=>
Applicative
(
WrappedArrow
a
b
)
where
pure
x
=
WrapArrow
(
arr
(
const
x
))
WrapArrow
f
<*>
WrapArrow
v
=
WrapArrow
(
f
&&&
v
>>>
arr
(
uncurry
id
))
instance
(
ArrowZero
a
,
ArrowPlus
a
)
=>
Alternative
(
WrappedArrow
a
b
)
where
empty
=
WrapArrow
zeroArrow
WrapArrow
u
<|>
WrapArrow
v
=
WrapArrow
(
u
<+>
v
)
-- | Lists, but with an 'Applicative' functor based on zipping, so that
--
-- @f '<$>' 'ZipList' xs1 '<*>' ... '<*>' 'ZipList' xsn = 'ZipList' (zipWithn f xs1 ... xsn)@
--
newtype
ZipList
a
=
ZipList
{
getZipList
::
[
a
]
}
deriving
(
Show
,
Eq
,
Ord
,
Read
,
Functor
,
Foldable
,
Generic
,
Generic1
)
-- See Data.Traversable for Traversabel instance due to import loops
instance
Applicative
ZipList
where
pure
x
=
ZipList
(
repeat
x
)
ZipList
fs
<*>
ZipList
xs
=
ZipList
(
zipWith
id
fs
xs
)
-- extra functions
-- | One or none.
optional
::
Alternative
f
=>
f
a
->
f
(
Maybe
a
)
optional
v
=
Just
<$>
v
<|>
pure
Nothing
libraries/base/Control/Arrow.hs
0 → 100644
View file @
70a4766e
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -Wno-inline-rule-shadowing #-}
-- The RULES for the methods of class Arrow may never fire
-- e.g. compose/arr; see Trac #10528
-----------------------------------------------------------------------------
-- |
-- Module : Control.Arrow
-- Copyright : (c) Ross Paterson 2002
-- License : BSD-style (see the LICENSE file in the distribution)
--
-- Maintainer : libraries@haskell.org
-- Stability : provisional
-- Portability : portable
--
-- Basic arrow definitions, based on
--
-- * /Generalising Monads to Arrows/, by John Hughes,
-- /Science of Computer Programming/ 37, pp67-111, May 2000.
--
-- plus a couple of definitions ('returnA' and 'loop') from
--
-- * /A New Notation for Arrows/, by Ross Paterson, in /ICFP 2001/,
-- Firenze, Italy, pp229-240.
--
-- These papers and more information on arrows can be found at
-- <http://www.haskell.org/arrows/>.
module
Control.Arrow
(
-- * Arrows
Arrow
(
..
),
Kleisli
(
..
),
-- ** Derived combinators
returnA
,
(
^>>
),
(
>>^
),
(
>>>
),
(
<<<
),
-- reexported
-- ** Right-to-left variants
(
<<^
),
(
^<<
),
-- * Monoid operations
ArrowZero
(
..
),
ArrowPlus
(
..
),
-- * Conditionals
ArrowChoice
(
..
),
-- * Arrow application
ArrowApply
(
..
),
ArrowMonad
(
..
),
leftApp
,
-- * Feedback
ArrowLoop
(
..
)
)
where
import
Data.Tuple
(
fst
,
snd
,
uncurry
)
import
Data.Either
import
Control.Monad.Fix
import
Control.Category
import
GHC.Base
hiding
(
(
.
),
id
)
infixr
5
<+>
infixr
3
***
infixr
3
&&&
infixr
2
+++
infixr
2
|||
infixr
1
^>>
,
>>^
infixr
1
^<<
,
<<^
-- | The basic arrow class.
--
-- Instances should satisfy the following laws:
--
-- * @'arr' id = 'id'@
--
-- * @'arr' (f >>> g) = 'arr' f >>> 'arr' g@
--
-- * @'first' ('arr' f) = 'arr' ('first' f)@
--
-- * @'first' (f >>> g) = 'first' f >>> 'first' g@
--
-- * @'first' f >>> 'arr' 'fst' = 'arr' 'fst' >>> f@
--
-- * @'first' f >>> 'arr' ('id' *** g) = 'arr' ('id' *** g) >>> 'first' f@
--
-- * @'first' ('first' f) >>> 'arr' 'assoc' = 'arr' 'assoc' >>> 'first' f@
--
-- where
--
-- > assoc ((a,b),c) = (a,(b,c))
--
-- The other combinators have sensible default definitions,
-- which may be overridden for efficiency.
class
Category
a
=>
Arrow
a
where
{-# MINIMAL arr, (first | (***)) #-}
-- | Lift a function to an arrow.
arr
::
(
b
->
c
)
->
a
b
c
-- | Send the first component of the input through the argument
-- arrow, and copy the rest unchanged to the output.
first
::
a
b
c
->
a
(
b
,
d
)
(
c
,
d
)
first
=
(
***
id
)
-- | A mirror image of 'first'.
--
-- The default definition may be overridden with a more efficient
-- version if desired.
second
::
a
b
c
->
a
(
d
,
b
)
(
d
,
c
)
second
=
(
id
***
)
-- | Split the input between the two argument arrows and combine
-- their output. Note that this is in general not a functor.
--
-- The default definition may be overridden with a more efficient
-- version if desired.
(
***
)
::
a
b
c
->
a
b'
c'
->
a
(
b
,
b'
)
(
c
,
c'
)
f
***
g
=
first
f
>>>
arr
swap
>>>
first
g
>>>
arr
swap
where
swap
~
(
x
,
y
)
=
(
y
,
x
)
-- | Fanout: send the input to both argument arrows and combine
-- their output.
--
-- The default definition may be overridden with a more efficient
-- version if desired.
(
&&&
)
::
a
b
c
->
a
b
c'
->
a
b
(
c
,
c'
)
f
&&&
g
=
arr
(
\
b
->
(
b
,
b
))
>>>
f
***
g
{-# RULES
"compose/arr" forall f g .
(arr f) . (arr g) = arr (f . g)
"first/arr" forall f .
first (arr f) = arr (first f)
"second/arr" forall f .
second (arr f) = arr (second f)
"product/arr" forall f g .
arr f *** arr g = arr (f *** g)
"fanout/arr" forall f g .
arr f &&& arr g = arr (f &&& g)
"compose/first" forall f g .
(first f) . (first g) = first (f . g)
"compose/second" forall f g .
(second f) . (second g) = second (f . g)
#-}
-- Ordinary functions are arrows.
instance
Arrow
(
->
)
where
arr
f
=
f
-- (f *** g) ~(x,y) = (f x, g y)
-- sorry, although the above defn is fully H'98, nhc98 can't parse it.
(
***
)
f
g
~
(
x
,
y
)
=
(
f
x
,
g
y
)
-- | Kleisli arrows of a monad.
newtype
Kleisli
m
a
b
=
Kleisli
{
runKleisli
::
a
->
m
b
}
instance
Monad
m
=>
Category
(
Kleisli
m
)
where
id
=
Kleisli
return
(
Kleisli
f
)
.
(
Kleisli
g
)
=
Kleisli
(
\
b
->
g
b
>>=
f
)
instance
Monad
m
=>
Arrow
(
Kleisli
m
)
where
arr
f
=
Kleisli
(
return
.
f
)
first
(
Kleisli
f
)
=
Kleisli
(
\
~
(
b
,
d
)
->
f
b
>>=
\
c
->
return
(
c
,
d
))
second
(
Kleisli
f
)
=
Kleisli
(
\
~
(
d
,
b
)
->
f
b
>>=
\
c
->
return
(
d
,
c
))
-- | The identity arrow, which plays the role of 'return' in arrow notation.
returnA
::
Arrow
a
=>
a
b
b
returnA
=
arr
id
-- | Precomposition with a pure function.
(
^>>
)
::
Arrow
a
=>
(
b
->
c
)
->
a
c
d
->
a
b
d
f
^>>
a
=
arr
f
>>>
a
-- | Postcomposition with a pure function.
(
>>^
)
::
Arrow
a
=>
a
b
c
->
(
c
->
d
)
->
a
b
d
a
>>^
f
=
a
>>>
arr
f
-- | Precomposition with a pure function (right-to-left variant).
(
<<^
)
::
Arrow
a
=>
a
c
d
->
(
b
->
c
)
->
a
b
d
a
<<^
f
=
a
<<<
arr
f
-- | Postcomposition with a pure function (right-to-left variant).
(
^<<
)
::
Arrow
a
=>
(
c
->
d
)
->
a
b
c
->
a
b
d
f
^<<
a
=
arr
f
<<<
a
class
Arrow
a
=>
ArrowZero
a
where
zeroArrow
::
a
b
c
instance
MonadPlus
m
=>
ArrowZero
(
Kleisli
m
)
where
zeroArrow
=
Kleisli
(
\
_
->
mzero
)
-- | A monoid on arrows.
class
ArrowZero
a
=>
ArrowPlus
a
where
-- | An associative operation with identity 'zeroArrow'.
(
<+>
)
::
a
b
c
->
a
b
c
->
a
b
c
instance
MonadPlus
m
=>
ArrowPlus
(
Kleisli
m
)
where
Kleisli
f
<+>
Kleisli
g
=
Kleisli
(
\
x
->
f
x
`
mplus
`
g
x
)
-- | Choice, for arrows that support it. This class underlies the
-- @if@ and @case@ constructs in arrow notation.
--
-- Instances should satisfy the following laws:
--
-- * @'left' ('arr' f) = 'arr' ('left' f)@
--
-- * @'left' (f >>> g) = 'left' f >>> 'left' g@
--
-- * @f >>> 'arr' 'Left' = 'arr' 'Left' >>> 'left' f@
--
-- * @'left' f >>> 'arr' ('id' +++ g) = 'arr' ('id' +++ g) >>> 'left' f@