如何仅使用 stack.yaml 将 ghci 与我的反射项目一起使用?
How can I use ghci with my reflex project using only stack.yaml?
我已经从我的 reflex 项目中删除了 nix,并用 stack 替换了它。一切都很好,除了能够使用 repl。我试图创建一个最小的反射项目来演示我的尝试,以及我的尝试产生的错误。
https://github.com/mlitchard/reflex-todo
stack repl --stack-yaml=stack-ghc.yaml
截断的错误日志
Error: -- While building custom Setup.hs for package jsaddle-dom
-0.9.2.0 using: /home/mlitchard/.stack/setup-exe-cache/x86_64-
linux/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-
work/dist/x86_64-linux/Cabal-1.24.2.0 build lib:jsaddle-dom --ghc-
options " -ddump-hi -ddump-to-file" Process exited with code:
ExitFailure 1 Logs have been written to:
/home/mlitchard/projects/git/reflex-todo/.stack-work/logs/jsaddle-dom-0.9.2.0.log
Preprocessing library jsaddle-dom-0.9.2.0...
[587 of 599] Compiling JSDOM.Custom.XMLHttpRequest (
src/JSDOM/Custom/XMLHttpRequest.hs, .stack-work/dist/x86_64-
linux/Cabal-1.24.2.0/build/JSDOM/Custom/XMLHttpRequest.o )
/home/mlitchard/projects/git/reflex-todo/.stack-
work/downloaded/Vheiln5kqwE0/src/JSDOM/Custom/XMLHttpRequest.hs:39:46:
error:
• Could not deduce (Control.Monad.Catch.MonadThrow
Language.Javascript.JSaddle.Types.JSM)
arising from a use of ‘throwM’
from the context: MonadDOM m
bound by the type signature for:
throwXHRError :: MonadDOM m => Maybe XHRError -> m ()
at src/JSDOM/Custom/XMLHttpRequest.hs:38:1-53
• In the second argument of ‘(.)’, namely ‘throwM’
In the second argument of ‘maybe’, namely ‘(liftDOM . throwM)’
In the expression: maybe (return ()) (liftDOM . throwM)
/home/mlitchard/projects/git/reflex-todo/.stack-
work/downloaded/Vheiln5kqwE0/src/JSDOM/Custom/XMLHttpRequest.hs:42:20:
error:
• No instance for (Control.Monad.Catch.MonadMask
Language.Javascript.JSaddle.Types.JSM)
arising from a use of ‘bracket’
• In the first argument of ‘(.)’, namely ‘bracket aquire id’
In the expression: bracket aquire id . const
In an equation for ‘withEvent’:
withEvent aquire = bracket aquire id . const
/home/mlitchard/projects/git/reflex-todo/.stack-
work/downloaded/Vheiln5kqwE0/src/JSDOM/Custom/XMLHttpRequest.hs:45:31:
error:
• Could not deduce (Control.Monad.Catch.MonadCatch
Language.Javascript.JSaddle.Types.JSM)
arising from an operator section
from the context: MonadDOM m
bound by the type signature for:
send' :: MonadDOM m => XMLHttpRequest -> Maybe JSVal -> m ()
at src/JSDOM/Custom/XMLHttpRequest.hs:44:1-62
• In the expression: (`onException` abort self)
In the second argument of ‘($)’, namely
‘(`onException` abort self)
$ do { result <- liftIO newEmptyMVar;
r <- withEvent
(onAsync self Generated.error . liftIO
$ putMVar result (Just XHRError))
$ withEvent
(onAsync self abortEvent . liftIO
$ putMVar result (Just XHRAborted))
$ withEvent (onAsync self load . liftIO $ putMVar result Nothing)
$ do { void
$ case mbVal of {
Nothing -> ...
Just val -> ... };
liftIO $ takeMVar result };
throwXHRError r }’
In the expression:
liftDOM
$ (`onException` abort self)
$ do { result <- liftIO newEmptyMVar;
r <- withEvent
(onAsync self Generated.error . liftIO
$ putMVar result (Just XHRError))
$ withEvent
(onAsync self abortEvent . liftIO
$ putMVar result (Just XHRAborted))
$ withEvent (onAsync self load . liftIO $ putMVar result Nothing)
$ do { void
$ case mbVal of {
Nothing -> ...
Just val -> ... };
liftIO $ takeMVar result };
throwXHRError r }
答案的线索来自这个项目,https://github.com/nomeata/reflex-dom-fragment-shader-canvas。
具体来说,这个标志:package reflex-dom
flags: +use-warp -webkit2gtk
。
我已经更新了上面的 git 项目以反映一个有效的 stack.yaml 文件。
我已经从我的 reflex 项目中删除了 nix,并用 stack 替换了它。一切都很好,除了能够使用 repl。我试图创建一个最小的反射项目来演示我的尝试,以及我的尝试产生的错误。
https://github.com/mlitchard/reflex-todo
stack repl --stack-yaml=stack-ghc.yaml
截断的错误日志
Error: -- While building custom Setup.hs for package jsaddle-dom
-0.9.2.0 using: /home/mlitchard/.stack/setup-exe-cache/x86_64-
linux/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-
work/dist/x86_64-linux/Cabal-1.24.2.0 build lib:jsaddle-dom --ghc-
options " -ddump-hi -ddump-to-file" Process exited with code:
ExitFailure 1 Logs have been written to:
/home/mlitchard/projects/git/reflex-todo/.stack-work/logs/jsaddle-dom-0.9.2.0.log
Preprocessing library jsaddle-dom-0.9.2.0...
[587 of 599] Compiling JSDOM.Custom.XMLHttpRequest (
src/JSDOM/Custom/XMLHttpRequest.hs, .stack-work/dist/x86_64-
linux/Cabal-1.24.2.0/build/JSDOM/Custom/XMLHttpRequest.o )
/home/mlitchard/projects/git/reflex-todo/.stack-
work/downloaded/Vheiln5kqwE0/src/JSDOM/Custom/XMLHttpRequest.hs:39:46:
error:
• Could not deduce (Control.Monad.Catch.MonadThrow
Language.Javascript.JSaddle.Types.JSM)
arising from a use of ‘throwM’
from the context: MonadDOM m
bound by the type signature for:
throwXHRError :: MonadDOM m => Maybe XHRError -> m ()
at src/JSDOM/Custom/XMLHttpRequest.hs:38:1-53
• In the second argument of ‘(.)’, namely ‘throwM’
In the second argument of ‘maybe’, namely ‘(liftDOM . throwM)’
In the expression: maybe (return ()) (liftDOM . throwM)
/home/mlitchard/projects/git/reflex-todo/.stack-
work/downloaded/Vheiln5kqwE0/src/JSDOM/Custom/XMLHttpRequest.hs:42:20:
error:
• No instance for (Control.Monad.Catch.MonadMask
Language.Javascript.JSaddle.Types.JSM)
arising from a use of ‘bracket’
• In the first argument of ‘(.)’, namely ‘bracket aquire id’
In the expression: bracket aquire id . const
In an equation for ‘withEvent’:
withEvent aquire = bracket aquire id . const
/home/mlitchard/projects/git/reflex-todo/.stack-
work/downloaded/Vheiln5kqwE0/src/JSDOM/Custom/XMLHttpRequest.hs:45:31:
error:
• Could not deduce (Control.Monad.Catch.MonadCatch
Language.Javascript.JSaddle.Types.JSM)
arising from an operator section
from the context: MonadDOM m
bound by the type signature for:
send' :: MonadDOM m => XMLHttpRequest -> Maybe JSVal -> m ()
at src/JSDOM/Custom/XMLHttpRequest.hs:44:1-62
• In the expression: (`onException` abort self)
In the second argument of ‘($)’, namely
‘(`onException` abort self)
$ do { result <- liftIO newEmptyMVar;
r <- withEvent
(onAsync self Generated.error . liftIO
$ putMVar result (Just XHRError))
$ withEvent
(onAsync self abortEvent . liftIO
$ putMVar result (Just XHRAborted))
$ withEvent (onAsync self load . liftIO $ putMVar result Nothing)
$ do { void
$ case mbVal of {
Nothing -> ...
Just val -> ... };
liftIO $ takeMVar result };
throwXHRError r }’
In the expression:
liftDOM
$ (`onException` abort self)
$ do { result <- liftIO newEmptyMVar;
r <- withEvent
(onAsync self Generated.error . liftIO
$ putMVar result (Just XHRError))
$ withEvent
(onAsync self abortEvent . liftIO
$ putMVar result (Just XHRAborted))
$ withEvent (onAsync self load . liftIO $ putMVar result Nothing)
$ do { void
$ case mbVal of {
Nothing -> ...
Just val -> ... };
liftIO $ takeMVar result };
throwXHRError r }
答案的线索来自这个项目,https://github.com/nomeata/reflex-dom-fragment-shader-canvas。
具体来说,这个标志:package reflex-dom
flags: +use-warp -webkit2gtk
。
我已经更新了上面的 git 项目以反映一个有效的 stack.yaml 文件。