我以前编写过一个似乎有效的函数,但不幸的是我没有很好地编写代码,现在必须再次弄清楚[我正在修改我正在使用的monad变换器堆栈].
run_astvn ::
LowerMonadT (StateT LowerSketchData Identity) ?
-> Seq SketchAST
run_astvn x = get_ast2 $ runIdentity $
runStateT (runStateT (runStateT x empty) empty)
(LowerSketchData Set.empty)
where get_ast2 = snd . fst
Run Code Online (Sandbox Code Playgroud)
我想得到具体的类型get_ast2.我似乎能够-ddump-simpl通过我的终端输出添加标志和grep,直到我找到,(清理了一点)
(((?, Seq SketchAST), Seq SketchAST), LowerSketchData) -> Seq SketchAST
Run Code Online (Sandbox Code Playgroud)
(对不起,这对其他人来说可能是胡说八道,但关键是它对我有用.)有更快/更方便的方法吗?如果不是很明显,在这种情况下我所说的"具体"是指上述类型是有用的; 知道的类型snd . fst不是:).
根据维基百科,下面的代码应该编译,
{-# LANGUAGE RankNTypes #-}
data T = MkT (exists a. Show a => a)
Run Code Online (Sandbox Code Playgroud)
但是,我没有运气.ghci 7.2.2抱怨,
test.hs:2:23:
Illegal symbol '.' in type
Perhaps you intended -XRankNTypes or similar flag
to enable explicit-forall syntax: forall <tvs>. <type>
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)
原始链接在这里:http://en.wikibooks.org/wiki/Haskell/Existentially_quantified_types
提前致谢!
这是一个错误吗?
{-# LANGUAGE NoMonomorphismRestriction #-}
import qualified Text.Parsec.Token as P
import Text.Parsec.Language (haskellDef)
(P.TokenParser { P.identifier = ident }) = P.makeTokenParser haskellDef
Run Code Online (Sandbox Code Playgroud)
ident类型的收益率Text.Parsec.Prim.ParsecT String GHC.Prim.Any Data.Functor.Identity.Identity String,而定义
haskell = P.makeTokenParser haskellDef
ident = P.identifier haskell
Run Code Online (Sandbox Code Playgroud)
产生一种类型 Text.Parsec.Prim.ParsecT String u Data.Functor.Identity.Identity String
ghci的行为不一样,
infixl 4 <++>
(<++>) = liftM2 (++)
(P.TokenParser { P.identifier = ident }) = P.makeTokenParser haskellDef
suitable_macro = ident
parseMacro = many space *> suitable_macro
parseMacro' =
try (string "{{" *> parseMacro <* string …Run Code Online (Sandbox Code Playgroud) 默认的Eclipse LogCat窗口包含来自VM等的大量控制台垃圾邮件.如何删除这些邮件?看来,唯一的过滤器现在是过滤的一种表现,而不是过滤掉垃圾邮件.
我看到Seq有一个从IEnumerable到Seq的强制转换功能,但是如何让它工作呢?
open System.Text.RegularExpressions;;
let v = Regex.Match("abcd", "(ab)");;
Seq.cast (v.Captures);;
Run Code Online (Sandbox Code Playgroud)
这会产生,
错误FS0030:值限制.值'it'被推断为具有泛型类型val:seq <'_ a>
将'it'定义为一个简单的数据项,使其成为具有显式参数的函数,或者,如果您不打算使它是通用的,添加类型注释.
我想将Data.Dynamics 映射到其他Data.Dynamics.但是,我不能写
Map Dynamic Dynamic
Run Code Online (Sandbox Code Playgroud)
因为没有Ord Dynamic.有没有任何解决方案(比如Dynamic其toDyn功能只接受Ord事物的版本,并在拳击时提升类型类?)
这样做的动机是从EDSL编译器中的变量 - >值中获取一个映射.(显然,变量可以有不同的类型). 编辑:对不起,这个问题没有必要,我可以/应该只将变量名存储为密钥.但是,我仍然对这个问题感兴趣.
提前致谢!!
散列集和映射的monadic接口是否在Haskell中消失了?在使用现代版本时,我应该考虑什么样的性能模型?(Data.Map,Data.HashMap,Data.HashSet).它们在我的版本中似乎没有任何IO代码(ghc 7.0.2),
> :browse Data.HashSet
type HashSet a = Set a
newtype Set a
= Data.HashSet.Set (Data.IntMap.IntMap (Data.HashSet.Some a))
(\\) :: Ord a => Set a -> Set a -> Set a
delete :: (Data.Hashable.Hashable a, Ord a) => a -> Set a -> Set a
difference :: Ord a => Set a -> Set a -> Set a
elems :: Set a -> [a]
empty :: Set a
Data.HashSet.filter :: Ord a => (a -> Bool) -> Set a …Run Code Online (Sandbox Code Playgroud) 显然,Flask的app.route/ app.add_url_rule不适用于闭包。例如,使用创建一个基本应用,
for name in ('/hi', '/bye'):
app.add_url_rule(name, view_func=lambda: name)
Run Code Online (Sandbox Code Playgroud)
并查询它
dev:~/pg/yelp-main> curl localhost:9113/hi
/bye
Run Code Online (Sandbox Code Playgroud)
表明它不适用于闭包。解决此问题的最简单方法是什么?我可以强制Python实际上创建两个函数吗?
haskell ×5
ghc ×3
.net ×1
android ×1
concrete ×1
debugging ×1
dynamictype ×1
eclipse ×1
f# ×1
field ×1
flask ×1
hash ×1
ienumerable ×1
logcat ×1
map ×1
python ×1
restriction ×1
state-monad ×1
types ×1