Skip to content

Commit

Permalink
Merge pull request #11 from ethul/topic/options-underlying
Browse files Browse the repository at this point in the history
Adding runOptions
  • Loading branch information
ethul committed Sep 11, 2015
2 parents f3dce92 + 18082bb commit 069b1b2
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 5 deletions.
6 changes: 6 additions & 0 deletions docs/Data/Options.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ key :: forall opt value. Option opt value -> String
opt :: forall opt value. (IsOption value) => String -> Option opt value
```

#### `runOptions`

``` purescript
runOptions :: forall a. Options a -> Array (Tuple String Foreign)
```

#### `options`

``` purescript
Expand Down
20 changes: 18 additions & 2 deletions src/Data/Options.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,30 @@ function isOptionPrimFn(k, v) {

function options(o) {
var res = {};
var i = -1;
var n = o.length;
while(++i < n) {
var i;
for (i = 0; i < n; i++) {
var k = o[i][0];
var v = o[i][1];
res[k] = v;
}
return res;
}

function runOptionsFn(Tuple) {
return function(o){
var res = [];
var n = o.length;
var i;
for (i = 0; i < n; i++) {
var k = o[i][0];
var v = o[i][1];
res[i] = Tuple(k)(v);
}
return res;
};
}

exports.memptyFn = memptyFn;

exports.appendFn = appendFn;
Expand All @@ -45,3 +59,5 @@ exports.joinFn = joinFn;
exports.isOptionPrimFn = isOptionPrimFn;

exports.options = options;

exports.runOptionsFn = runOptionsFn
8 changes: 8 additions & 0 deletions src/Data/Options.purs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ module Data.Options
, assoc, (:=)
, optionFn
, options
, runOptions
, opt, key
) where

Expand All @@ -18,6 +19,8 @@ import Data.Maybe (Maybe(..))

import Data.Monoid (Monoid)

import Data.Tuple (Tuple(..))

import Unsafe.Coerce (unsafeCoerce)

foreign import data Options :: * -> *
Expand Down Expand Up @@ -75,6 +78,9 @@ key = unsafeCoerce
opt :: forall opt value. (IsOption value) => String -> Option opt value
opt = unsafeCoerce

runOptions :: forall a. Options a -> Array (Tuple String Foreign)
runOptions = runOptionsFn Tuple

foreign import memptyFn :: forall a. Options a

foreign import appendFn :: forall a. Fn2 (Options a) (Options a) (Options a)
Expand All @@ -84,3 +90,5 @@ foreign import joinFn :: forall a b. Array (Options a) -> Options b
foreign import isOptionPrimFn :: forall b a. Fn2 (Option b a) a (Options b)

foreign import options :: forall a. Options a -> Foreign

foreign import runOptionsFn :: forall a. (String -> Foreign -> Tuple String Foreign) -> Options a -> Array (Tuple String Foreign)
10 changes: 7 additions & 3 deletions test/Test/Main.purs
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@ module Test.Main where

import Prelude

import Control.Monad.Eff.Console (log)
import Control.Monad.Eff.Console (log, print)

import Data.Foreign (Foreign())

import Data.Maybe (Maybe(..))

import Data.Options (Option(), IsOption, optionFn, options, opt, (:=), assoc)
import Data.Options (Option(), IsOption, optionFn, options, opt, (:=), assoc, runOptions)

import Data.Tuple (Tuple(..))

data Shape = Circle | Square | Triangle

Expand Down Expand Up @@ -40,6 +42,8 @@ opts = foo := "aaa" <>
buz := (\a b c -> a + b + c) <>
fuz := [Square, Circle, Triangle]

main = (log <<< showForeign <<< options) opts
main = do
(log <<< showForeign <<< options) opts
print $ (\(Tuple k v) -> Tuple k (showForeign v)) <$> runOptions opts

foreign import showForeign :: Foreign -> String

0 comments on commit 069b1b2

Please sign in to comment.