-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
180 additions
and
148 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,106 @@ | ||
# rock | ||
# rock [![Hackage](https://img.shields.io/hackage/v/rock.svg)](https://hackage.haskell.org/package/rock) | ||
|
||
A build system inspired by _Build systems à la carte_ and Haxl. | ||
A build system inspired by [Build systems à la carte](https://www.microsoft.com/en-us/research/publication/build-systems-la-carte/) and [Haxl](http://hackage.haskell.org/package/haxl). | ||
|
||
Used in [Sixten](https://github.com/ollef/sixten) and | ||
[Sixty](https://github.com/ollef/sixty) to achieve incremental and query driven | ||
compiler architectures. | ||
|
||
# Example | ||
|
||
```haskell | ||
{-# language GADTs #-} | ||
{-# language NoImplicitPrelude #-} | ||
{-# language OverloadedStrings #-} | ||
{-# language StandaloneDeriving #-} | ||
{-# language TemplateHaskell #-} | ||
|
||
import Protolude | ||
|
||
import Data.GADT.Compare.TH (deriveGEq, deriveGCompare) | ||
import qualified Rock | ||
|
||
data Query a where | ||
A :: Query Integer | ||
B :: Query Integer | ||
C :: Query Integer | ||
D :: Query Integer | ||
|
||
deriving instance Show (Query a) | ||
|
||
deriveGEq ''Query | ||
deriveGCompare ''Query | ||
|
||
rules :: Rock.Rules Query | ||
rules key = do | ||
putText $ "Fetching " <> show key | ||
case key of | ||
A -> pure 10 | ||
B -> do | ||
a <- Rock.fetch A | ||
pure $ a + 20 | ||
C -> do | ||
a <- Rock.fetch A | ||
pure $ a + 30 | ||
D -> | ||
(+) <$> Rock.fetch B <*> Rock.fetch C | ||
|
||
main :: IO () | ||
main = do | ||
do | ||
putText "Running" | ||
result <- Rock.runTask Rock.sequentially rules (Rock.fetch D) | ||
print result | ||
do | ||
putText "Running with memoisation" | ||
memoVar <- newMVar mempty | ||
result <- | ||
Rock.runTask | ||
Rock.sequentially | ||
(Rock.memoise memoVar rules) | ||
(Rock.fetch D) | ||
print result | ||
do | ||
putText "Running with memoisation using the parallel strategy" | ||
memoVar <- newMVar mempty | ||
result <- | ||
Rock.runTask | ||
Rock.inParallel | ||
(Rock.memoise memoVar rules) | ||
(Rock.fetch D) | ||
print result | ||
``` | ||
|
||
Prints | ||
|
||
``` | ||
Running | ||
Fetching D | ||
Fetching B | ||
Fetching A | ||
Fetching C | ||
Fetching A | ||
70 | ||
Running with memoisation | ||
Fetching D | ||
Fetching B | ||
Fetching A | ||
Fetching C | ||
70 | ||
Running with memoisation using the parallel strategy | ||
Fetching D | ||
Fetching C | ||
Fetching B | ||
Fetching A | ||
70 | ||
``` | ||
|
||
# Related projects | ||
|
||
* [Shake](http://hackage.haskell.org/package/shake) | ||
* [Salsa](https://crates.io/crates/salsa) | ||
|
||
# Contributions | ||
|
||
... are very welcome, especially in the areas of documentation, examples, | ||
testing, and benchmarking. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
{-# language GADTs #-} | ||
{-# language NoImplicitPrelude #-} | ||
{-# language OverloadedStrings #-} | ||
{-# language StandaloneDeriving #-} | ||
{-# language TemplateHaskell #-} | ||
|
||
import Protolude | ||
|
||
import Data.GADT.Compare.TH (deriveGEq, deriveGCompare) | ||
import qualified Rock | ||
|
||
data Query a where | ||
A :: Query Integer | ||
B :: Query Integer | ||
C :: Query Integer | ||
D :: Query Integer | ||
|
||
deriving instance Show (Query a) | ||
|
||
deriveGEq ''Query | ||
deriveGCompare ''Query | ||
|
||
rules :: Rock.Rules Query | ||
rules key = do | ||
putText $ "Fetching " <> show key | ||
case key of | ||
A -> pure 10 | ||
B -> do | ||
a <- Rock.fetch A | ||
pure $ a + 20 | ||
C -> do | ||
a <- Rock.fetch A | ||
pure $ a + 30 | ||
D -> | ||
(+) <$> Rock.fetch B <*> Rock.fetch C | ||
|
||
main :: IO () | ||
main = do | ||
do | ||
putText "Running" | ||
result <- Rock.runTask Rock.sequentially rules (Rock.fetch D) | ||
print result | ||
do | ||
putText "Running with memoisation" | ||
memoVar <- newMVar mempty | ||
result <- | ||
Rock.runTask | ||
Rock.sequentially | ||
(Rock.memoise memoVar rules) | ||
(Rock.fetch D) | ||
print result | ||
do | ||
putText "Running with memoisation using the parallel strategy" | ||
memoVar <- newMVar mempty | ||
result <- | ||
Rock.runTask | ||
Rock.inParallel | ||
(Rock.memoise memoVar rules) | ||
(Rock.fetch D) | ||
print result |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.