on master help sign in
wip
72797aeiko
bw/spago.dhall+1
@@ -10,6 +10,7 @@
10 , "maybe"
10 , "maybe"
11 , "newtype"
11 , "newtype"
12 , "prelude"
12 , "prelude"
13+ , "ell"
13 ]
14 ]
14, packages = ../packages.dhall
15, packages = ../packages.dhall
15, sources = [ "src/**/*.purs" ]
16, sources = [ "src/**/*.purs" ]
bw/src/BW/Logic.purs+19−4
@@ -1,12 +1,27 @@
1module BW.Logic where
1module BW.Logic where
2
2
3+import BW.Types
3import Prelude
4import Prelude
4
5
5−import BW.Types
6+import Control.Ell (class EllHas, Ell, l)
7+import Data.Nullable (null)
6
8
7−newtype Username = Username String
9+newtype Email = Email String
8
10
9newtype Password = Password String
11newtype Password = Password String
10
12
11−-- generateLogin :: Username -> Password -> PasswordTokenRequest
13+generateLogin :: forall r. EllHas (hashPassword :: String -> Ell r String) r => Email -> Password -> Ell r PasswordTokenRequest
12−-- generateLogin (Username user) (Password password) = 1
14+generateLogin (Email email) (Password password) = do
15+ _ <- l _.hashPassword ""
16+ -- let token = user ++ password
17+ pure $
18+ { email
19+ , masterPasswordHash: ""
20+ , captchaResponse: ""
21+ , twoFactor: {
22+ provider: twoFactorProviderTypeEmail,
23+ token: "",
24+ remember: true
25+ }
26+ , device: null
27+ }
ell/spago.dhallnew file+8
@@ -0,0 +1,8 @@
1+{ name = "bw"
2+, dependencies =
3+ [ "prelude"
4+ , "transformers"
5+ ]
6+, packages = ../packages.dhall
7+, sources = [ "src/**/*.purs" ]
8+}
ell/src/Control/Ell.pursnew file+31
@@ -0,0 +1,31 @@
1+module Control.Ell where
2+
3+import Prelude
4+
5+import Control.Monad.Reader (ReaderT, asks)
6+import Effect (Effect)
7+import Prim.Row (class Cons, class Union, class Nub)
8+
9+type Ell r a = ReaderT { | r } Effect a
10+
11+l :: forall r a res. ApplyEll r a res => ({ | r } -> a) -> res
12+l f = appEll (asks f)
13+
14+class EllHas row r
15+
16+instance (Union row r r', Nub r' r) => EllHas row r
17+
18+class ApplyEll r a res | r a -> res where
19+ appEll :: Ell r a -> res
20+
21+instance ApplyEll r b c => ApplyEll r (a -> b) (a -> c) where
22+ appEll f a = appEll ((\g -> g a) <$> f)
23+
24+else instance ApplyEll r (Ell r a) (Ell r a) where
25+ appEll = join
26+
27+else instance ApplyEll r a (Ell r a) where
28+ appEll = identity
29+
30+foo ∷ ∀ (t55 ∷ Type) (t56 ∷ Row Type). { foo ∷ t55 | t56 } → t55
31+foo = _.foo
packages.dhall+1
@@ -104,6 +104,7 @@ let upstream =
104
104
105in upstream
105in upstream
106 with bw = ./bw/spago.dhall as Location
106 with bw = ./bw/spago.dhall as Location
107+ with ell = ./ell/spago.dhall as Location
107 with argonaut-aeson-generic =
108 with argonaut-aeson-generic =
108 { dependencies =
109 { dependencies =
109 [ "argonaut-codecs"
110 [ "argonaut-codecs"