小编z1n*_*Y5A的帖子

结合Compojure中的路线

我在Compojure开发的Clojure中有两个不同的Web应用程序.每个使用defroutes来创建它的处理程序.

如何将两种不同的defroutes定义组合成一个defroute?我想将第一个应用程序的路由重用到第二个应用程序.

clojure compojure

15
推荐指数
1
解决办法
2678
查看次数

使用ensime emacs在当前项目中执行sbt run

我有一个调用的Scala项目scala-playground,我用sbt ensimeConfig和生成了Ensime的配置sbt ensimeConfigProject.

M-x ensime从项目的缓冲区运行时,我可以在Emacs状态栏中看到Ensime已连接:它显示Scala[scala-playground].

在运行项目时C-c C-b r,在主目录中启动一个新的sbt实例,$HOME/project创建一个目录而不是项目目录并失败:

[info] Loading project definition from /home/user/project
[info] Set current project to user (in build file:/home/user/)
[info] sbt server started at 127.0.0.1:4766
sbt:user> 
sbt:user> run
[error] java.lang.RuntimeException: No main class detected.
[error]     at scala.sys.package$.error(package.scala:27)
[error]     at sbt.Defaults$.$anonfun$runTask$4(Defaults.scala:1199)
[error]     at scala.Option.getOrElse(Option.scala:121)
[error]     at sbt.Defaults$.$anonfun$runTask$3(Defaults.scala:1199)
[error]     at sbt.Defaults$.$anonfun$runTask$3$adapted(Defaults.scala:1198)
[error]     at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error]     at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:42)
[error]     at sbt.std.Transform$$anon$4.work(System.scala:64)
[error]     at sbt.Execute.$anonfun$submit$2(Execute.scala:257)
[error] …
Run Code Online (Sandbox Code Playgroud)

emacs sbt ensime

10
推荐指数
1
解决办法
504
查看次数

在Clojure中映射和记录相等性

我发现Clojure的行为混淆了地图和记录之间的平等.在第一个例子中,我们有两种结构相同的不同类型.equality =函数返回true:

user> (defn make-one-map
         []
       {:a "a" :b "b"})
#'user/make-one-map
user> (def m1 (make-one-map))
#'user/m1
user> m1
{:a "a", :b "b"}
user> (def m2 {:a "a" :b "b"})
#'user/m2
user> m2
{:a "a", :b "b"}
user> (= m1 m2)
true
user> (type m1)
clojure.lang.PersistentArrayMap
user> (type m2)
clojure.lang.PersistentHashMap
Run Code Online (Sandbox Code Playgroud)

在第二个例子中,我们有一个hashmap和一个记录,它们在结构上是等价的,但是= function返回false:

user> (defrecord Titi [a b])
user.Titi
user> (def titi (Titi. 1 2))
#'user/titi
user> titi
#user.Titi{:a 1, :b 2}
user> (= titi {:a 1 :b 2})
false
Run Code Online (Sandbox Code Playgroud)

为什么会有差异?我正在使用Clojure 1.3,我发现它们真的令人困惑.

equality record clojure map

7
推荐指数
2
解决办法
4147
查看次数

使用ClojureScript中的Cljsbuild编译外部JS文件

我正在尝试使用lein-cljsbuild编译一些JS库,以将它们集成到我们的ClojureScript代码库中.首先,我在每个文件的顶部添加了一些goog.provide,并且文件根据其命名空间(如Java中)在目录树中按层次结构组织.这就是命名空间abc在src-js/libs/a/b/c.js中

我把JS文件放在src-js/libs项目的根目录中,我有以下内容:lein-cljsbuild的编译器选项:

{:id "prod",
 :source-paths ["src-cljs" "src-js"]
 :compiler
 {:pretty-print false,
  :libs ["libs/"]
  :output-to "resources/public/js/compiled-app.js",
  :optimizations :simple}}
Run Code Online (Sandbox Code Playgroud)

没有JS文件被编译到编译应用程序文件中.怎么了?

我也尝试将它们放在resources/closure-js/libs中但没有成功.

我正在使用lein-cljsbuild 0.3.0.

leiningen clojurescript cljsbuild

5
推荐指数
1
解决办法
1678
查看次数

在应用程序的上下文中理解Haskell类型系统

我正在玩,Control.Applicative我意识到我不了解Haskell类型系统的一切.

这是我在Ghci的实验:

? :t (<*>)
(<*>) :: Applicative f => f (a -> b) -> f a -> f b

? :t (<*>) (pure 2)
(<*>) (pure 2) :: (Num (a -> b), Applicative f) => f a -> f b
Run Code Online (Sandbox Code Playgroud)

第一个参数的类型<*>f (a -> b).

  • 为什么这个表达正确?
  • 它是如何统一的,(pure 2)因为常量2不是类型a -> b
  • 什么Num (a -> b)意思?具有a -> b类型的函数如何成为Num?的实例?

haskell type-systems applicative

4
推荐指数
1
解决办法
81
查看次数

使用 Elixir 以十六进制打印整数

我可以在 Erlang 中做到这一点:

io:fwrite("~.16X~n", [-31,"0x"]).
-0x1F
ok
Run Code Online (Sandbox Code Playgroud)

但不是在 Elixir 中:

:io.fwrite("~.16X~n", [-31,"0x"]) ** (ArgumentError) argument error (stdlib) :io.format(#PID<0.54.0>, "~.16X~n", [-31, "0x"])

为什么不?

string-formatting elixir

3
推荐指数
1
解决办法
976
查看次数

绑定部分应用函数的类实例

BindPrelude中类的定义是:

class Apply m <= Bind m where
  bind :: forall a b. m a -> (a -> m b) -> m b
Run Code Online (Sandbox Code Playgroud)

它可以作为一个函数读取,它接受两个输入参数,monadic context(m a)和function(a -> m b)中的值,并在monadic context(m b)中返回一个值.

Bind部分应用函数的实例定义为:

instance bindFn :: Bind ((->) r) where
  bind m f x = f (m x) x
Run Code Online (Sandbox Code Playgroud)

这是一个采用三个参数的函数.那个类型检查怎么样?

如果我尝试用m a更具体的类型替换我得到(如果我错了,请纠正我):

(((->) ??) a) -> (a -> (((->) ??) b)) -> (((->) ??) b)
Run Code Online (Sandbox Code Playgroud)

这相当于

(?? …
Run Code Online (Sandbox Code Playgroud)

monads purescript

2
推荐指数
1
解决办法
93
查看次数

为免费monad定义翻译

purescript-free程序包中,有一个定义此解释器的代码示例:

teletypeN :: forall eff. NaturalTransformation TeletypeF (Eff (console :: CONSOLE | eff))
teletypeN (PutStrLn s a) = const a <$> log s
teletypeN (GetLine k) = pure (k "fake input")
Run Code Online (Sandbox Code Playgroud)

如何定义和运行返回类型为Array Int或的其他解释器State String Int

free-monad purescript

2
推荐指数
1
解决办法
130
查看次数

在PureScript中获取第二天的日期

无论如何,是否可以更优雅地编写以下函数?

我可以看到一些模式,但不确定如何抽象它们或如何找到一种更简单的编写函数的方法。

type HasRemainder = Boolean

tomorrow :: Date -> Date
tomorrow date = unsafePartial $ canonicalDate y (fst m) (fst d)
  where d :: Tuple Day HasRemainder
        d = case toEnum $ 1 + fromEnum (day date) of
          Just v -> Tuple v false
          Nothing -> Tuple (unsafePartial $ fromJust $ toEnum 1) true
        m :: Tuple Month HasRemainder
        m = if snd d then
              case toEnum $ 1 + fromEnum (month date) of
                Just v -> Tuple v …
Run Code Online (Sandbox Code Playgroud)

date purescript

0
推荐指数
1
解决办法
160
查看次数