我已经读过,Common Lisp中的每个表单在评估时都会返回一些内容.但是,最近我一直在玩ASDF API并找到一个什么都不返回的函数:
CL-USER> (asdf:clear-output-translations)
; No value
Run Code Online (Sandbox Code Playgroud)
这怎么可能,为什么不回归NIL呢?
我想学习Clojure,我已经下载并设置了以下小玩意:
我有它的工作.现在我正在尝试打印消息"Hello, World!",同时在Emacs中运行Cider:
; CIDER 0.6.0 (Java 1.7.0_65, Clojure 1.6.0, nREPL 0.2.0-beta5)
user> (println "Hello World!")
Hello World!NoSuchMethodError clojure.tools.nrepl.StdOutBuffer.length()I
clojure.tools.nrepl.middleware.session/session-out/fn--7630
(session.clj:43)NoSuchMethodError clojure.tools.nrepl.StdOutBuffer.length()I
clojure.tools.nrepl.middleware.session/session-out/fn--7630 (session.clj:43)
user>
Run Code Online (Sandbox Code Playgroud)
这噪音到底是什么?我跑的时候:
$ clojure
;Clojure 1.6.0
user=> (println "Hello, World!")
Hello, World!
nil
Run Code Online (Sandbox Code Playgroud)
一切都好.当我和Leiningen一起做的时候:
$ lein repl
; lotsa stuff here...
user=> (println "Hello, World!")
Run Code Online (Sandbox Code Playgroud)
输入这个命令后,我津津乐道以下诗歌:
CompilerException java.lang.RuntimeException: Unable to resolve symbol: rprintln in this context, compiling:(NO_SOURCE_PATH:1:1) NoSuchMethodError clojure.tools.nrepl.StdOutBuffer.length()I clojure.tools.nrepl.middleware.session/session-out/fn--7630 (session.clj:43)
Exception in thread "nREPL-worker-3" java.lang.NoSuchMethodError: clojure.tools.nrepl.StdOutBuffer.length()I
at clojure.tools.nrepl.middleware.session$session_out$fn__7630.doInvoke(session.clj:43)
at …Run Code Online (Sandbox Code Playgroud) 我正在开展一个项目,我正在使用Cabal进行管理.我已经指定了源文件,模块,所有东西的目录.我的所有文件都与相应的模块具有相同的名称,保留了大小写.
我可以:
$ cabal configure
$ cabal build
Run Code Online (Sandbox Code Playgroud)
没有问题.
但是,想象一下我Module在文件中有一个模块Module.hs,并且文件File.hs在同一目录中.现在,当我尝试File.hs从Emacs 加载进行测试时,我得到以下内容:
____Could not find module ‘Module’
It is a member of the hidden package ‘ghc-7.8.3’.
Use -v to see a list of the files searched for.
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)
全部内容File.hs:
module File where
import Module
Run Code Online (Sandbox Code Playgroud)
如何让它找到我的项目的文件?
我正在编写一个类型类 à la mtl 风格的转换器。看起来像这样:
class (Monad m, Stream s m t) => MonadStuff s m | m -> s where
-- function signatures go here…
Run Code Online (Sandbox Code Playgroud)
我试图通过该说m应该是实例Monad并且应该有实例Stream s m t,这里t没有真正的问题,但
s并m是自定义的右侧(后=>)。
哈斯克尔说:
不在范围内:类型变量“t”
所以,显然我不能那样做。或者我可以吗?我应该删除Stream s m t
约束并将其添加到类中的每个函数中还是有其他方法?
假设我有一个函数,它应该在一种情况下计算某个值,否则抛出异常。我想使用 QuickCheck 来确保我的函数正确运行,但是如何执行此类检查并不明显。是否有可能,如果是,如何检查抛出的某种类型的异常是否包含有关其原因的正确信息?
玩高级类型系统的东西。我想命名 kind 和几个产生这种类型的类型构造函数:
{-# LANGUAGE DataKinds #-}
data Subject = New | Existing
Run Code Online (Sandbox Code Playgroud)
在这里,据我所知,我们命名了 kindSubject和 type 构造函数
New,Existing它们是:: Subject. 这些类型构造函数不带参数(我打算将它们用作幻影类型),它应该大致相当于:
{-# LANGUAGE EmptyDataDecls #-}
data New
data Existing
Run Code Online (Sandbox Code Playgroud)
不同的是,现在我可以写:
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
-- …
data MyConfig :: Subject -> * -> * where
MyConfig
{ mcOneThing :: Path t File
} :: MyConfig k t
Run Code Online (Sandbox Code Playgroud)
这甚至可以编译。令人困惑的是,数据类型的声明与数据类型声明无法区分,所以这段代码似乎产生了数据类型Subject以及命名类型Subject(?)对我来说更清楚的是,我们可以指定我们在哪个级别声明事物(种类,然后New和Existing是类型构造函数;或类型,然后 …
是否有可能Enum使用GHC泛型重新实现类型类的派生?
起初,它看起来很简单:
data Foo -- representation without metadata (wrong):
= Foo -- L1 U1
| Bar -- R1 (L1 U1)
| Baz -- R1 (R1 (L1 U1))
| Quux -- R1 (R1 (R1 U1))
deriving (Show, Eq, Generic)
-- Rep Foo p = (U1 :+: (U1 :+: (U1 :+: U1))) p
instance Enum Foo where
toEnum = undefined -- FIXME
fromEnum = gfromEnum . from
class GEnum f where
gfromEnum :: f p -> Int
instance GEnum U1 …Run Code Online (Sandbox Code Playgroud) 我正在阅读第9章(更多输入和更多输出),了解大好的Haskell.现在我要学习如何在Haskell中生成随机数(这太激动了!).这是本书的引文:
要手动创建随机生成器,请使用
mkStdGenfunction.它有一种类型mkStdGen :: Int -> StdGen.它需要一个整数,并在此基础上给我们一个随机生成器.那么,让我们尝试使用random和mkStdGenin串联得到(几乎)随机数.
ghci> random (mkStdGen 100)
<interactive>:1:0:
Ambiguous type variable `a' in the constraint:
`Random a' arising from a use of `random' at <interactive>:1:0-20
Probable fix: add a type signature that fixes these type variable(s)
Run Code Online (Sandbox Code Playgroud)
这是什么?啊,对,该
random函数可以返回Random类型类的任何类型的值,因此我们需要通知Haskell我们想要哪种类型.另外,我们不要忘记它会在一对中返回一个随机值和一个随机生成器.
问题是我没有得到这个错误,事实上,我可以做到以下几点:
*Main> :m + System.Random
*Main System.Random> random (mkStdGen 100)
(-3633736515773289454,693699796 2103410263)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么我可以在不获得异常的情况下评估此表达式?
我找不到一种方法来呈现链接,然后在它之后使用逗号或句号,链接和标点符号之间没有空格。这是我的初步尝试:
<p>
You can find more information #
<a href="@{SomeRouteR}">here
\.
Run Code Online (Sandbox Code Playgroud)
或者
<p>
You can find more information #
<a href="@{SomeRouteR}">here
.
Run Code Online (Sandbox Code Playgroud)
这会在单词“here”和“.”之间插入空格。
另一种选择是:
<p>
You can find more information #
<a href="@{SomeRouteR}">here</a>.
Run Code Online (Sandbox Code Playgroud)
这看起来像一个胜利,但 HTML 格式错误:
<p>You can find more information <a href="…">here</a>.</a></p>
Run Code Online (Sandbox Code Playgroud)
有没有办法避免链接和标点符号/其他元素之间的空格?
haskell ×8
emacs ×2
cabal ×1
clojure ×1
common-lisp ×1
data-kinds ×1
enums ×1
exception ×1
function ×1
generics ×1
hamlet ×1
leiningen ×1
lisp ×1
quickcheck ×1
random ×1
return-value ×1
symlink ×1
typeclass ×1
types ×1
yesod ×1