我最近听到了关于virtualenv的嗡嗡声,我很感兴趣.但我所听到的只是一点点赞美,并且没有清楚地了解它是什么或如何使用它.
我正在寻找(理想情况下)一个后续教程,它可以带我从Windows或Linux上没有Python,并解释每一步(没有特定的顺序):
virtualenvvirtualenv是一个好主意virtualenvvirtualenv并且全面地介绍了应该+可以变化的几个样本情况.
那么有什么好的教程来涵盖这些东西?或者如果您有时间和兴趣,也许您可以在这里回答其中的一些问题.无论是在你的答案中,还是作为回答它的教程的链接,这些都是我想知道的.
似乎模板Haskell经常被Haskell社区视为一种不幸的便利.我很难准确地说出我在这方面所观察到的内容,但请考虑这几个例子
我已经看过各种博客文章,其中人们使用模板Haskell做了相当简洁的东西,实现了更好的语法,这在常规的Haskell中是不可能的,以及巨大的样板减少.那么为什么模板Haskell以这种方式受到鄙视呢?是什么让它不受欢迎?在什么情况下应避免模板Haskell,为什么?
Haskell中的Comonad类型类是什么?作为Comonad从Control.Comonad在comonad包(即提供Comonad类型类也是任何其他包的说明欢迎).我模糊地听说过Comonad,但我真正知道的是它提供的extract :: w a -> a,与Monad相似return :: a -> m a.
在"真实"代码中注意Comonad的"真实生活"用途的奖励积分.
Haskell的类型安全性仅对于依赖类型的语言是首屈一指的.但是Text.Printf有一些深刻的魔力似乎相当类型.
> printf "%d\n" 3
3
> printf "%s %f %d" "foo" 3.3 3
foo 3.3 3
Run Code Online (Sandbox Code Playgroud)
这背后的深层魔力是什么?该Text.Printf.printf函数如何采用像这样的可变参数?
用于允许Haskell中的可变参数的一般技术是什么,它是如何工作的?
(旁注:使用这种技术时,某种类型的安全性显然会丢失.)
> :t printf "%d\n" "foo"
printf "%d\n" "foo" :: (PrintfType ([Char] -> t)) => t
Run Code Online (Sandbox Code Playgroud) 我们都知道(或应该知道)Haskell默认是懒惰的.在必须对其进行评估之前,不评估任何内容.那么什么时候必须评估一下?Haskell必须严格要点.我把这些称为"严格点",虽然这个术语并不像我想象的那么广泛.据我说:
Haskell中的减少(或评估)仅发生在严格点处.
所以,问题是:什么,准确地说,是Haskell的严格点?我的直觉说main,seq/爆炸模式,模式匹配以及IO通过执行的任何动作main都是主要的严格点,但我不知道为什么我知道这一点.
(另外,如果他们不叫"严点",什么是他们叫什么名字?)
我想一个好的答案将包括一些关于WHNF等的讨论.我也想象它可能触及lambda演算.
编辑:关于这个问题的其他想法.
正如我在这个问题上的反思,我认为在严格点的定义中添加一些东西会更清楚.严格点可以具有不同的上下文和不同的深度(或严格性).回到我的定义"Haskell的减少只发生在严格点",让我们在这个定义中添加这个子句:"只有在评估或减少周围环境时才会触发严格点."
所以,让我试着让你开始我想要的那种答案.main是严格的一点.它被特别指定为其上下文的主要严格点:程序.当main评估程序(的上下文)时,激活main的严格点.主要深度是最大的:必须进行全面评估.Main通常由IO动作组成,它们也是严格点,其背景是main.
现在你尝试:seq用这些术语讨论和模式匹配.解释功能应用的细微差别:它是如何严格的?怎么回事?怎么样deepseq?let和case陈述?unsafePerformIO?Debug.Trace?顶级定义?严格的数据类型?邦模式?等等.这些项目中有多少只能用seq或模式匹配来描述?
我一般都听说生产代码应该避免使用Lazy I/O. 我的问题是,为什么?是否可以在懒散的I/O之外使用它?什么使替代品(例如调查员)更好?
我go在阅读Haskell材料或源代码时看到了很多,但我从来没有对它感到很自在 - (我想它在我的脑海中有"goto"的负面含义).我开始用LYAH学习Haskell,这就是我选择使用acc和step写折叠时的倾向.写作的惯例go来自哪里?
最重要的是,该名称到底go意味着什么?
当我尝试Haskell种类,并试图获得那种->,并且这出现了:
$ ghci
...
Prelude> :k (->)
(->) :: ?? -> ? -> *
Prelude>
Run Code Online (Sandbox Code Playgroud)
而不是预期的* -> * -> *.有什么??和?事情?它们是指具体类型还是"实物变量"?或者是其他东西?
我偶然发现了一篇博文,详细介绍了如何在Python中实现powerset函数.所以我开始尝试自己的方式,并发现Python显然不能有一组集合,因为set不可清除.这是令人厌烦的,因为powerset的定义是它是一组集合,我想使用实际的集合操作来实现它.
>>> set([ set() ])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
Run Code Online (Sandbox Code Playgroud)
有没有一个很好的理由Python设置不可用?
使用类型级自然的典型定义,我已经定义了一个n维网格.
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
data Nat = Z | S Nat
data U (n :: Nat) x where
Point :: x -> U Z x
Dimension :: [U n x] -> U n x -> [U n x] -> U (S n) x
dmap :: (U n x -> U m r) -> U (S n) x -> U (S m) r
dmap f (Dimension ls mid …Run Code Online (Sandbox Code Playgroud) haskell ×8
comonad ×2
python ×2
hash ×1
io ×1
polyvariadic ×1
printf ×1
set ×1
strictness ×1
type-systems ×1
typeclass ×1
types ×1
virtualenv ×1