Tag: haskell

如何在Haskell中导入.hs文件

我做了一个叫time.hs的文件。 它包含一个测量另一个函数执行时间的函数。 有没有办法将time.hs文件导入到另一个Haskell脚本? 我想要的东西是: module Main where import C:\Haskell\time.hs main = do putStrLn "Starting…" time $ print answer putStrLn "Done." 在'time.hs'中定义的时间为: module time where Import <necessary modules> time a = do start <- getCPUTime v <- a end <- getCPUTime let diff = (fromIntegral (end – start)) / (10^12) printf "Computation time: %0.3f sec\n" (diff […]

Pattern Matching和Guards有什么区别?

我对Haskell和函数式编程都很新颖。 我的问题是非常基本的。 Pattern Matching和Guards有什么区别? 函数使用模式匹配 check :: [a] -> String check [] = "Empty" check (x:xs) = "Contains Elements" 使用警卫的function check_ :: [a] -> String check_ lst | length lst < 1 = "Empty" | otherwise = "Contains elements" 对我来说,模式匹配和守卫看起来基本相同。 两者都评估一个条件,如果为true,则会执行挂钩的expression式。 我的理解是否正确? 在这个例子中,我可以使用模式匹配或守卫来达到相同的结果。 但是有些事情告诉我,我错过了一些重要的东西。 我们可以总是replace一个吗? 有人可以举例说明模式匹配优于守卫,反之亦然?

如何在二进制或hex中打印整数文字在哈斯克尔?

如何在二进制或hex中打印整数文字在哈斯克尔? printBinary 5 => "0101" printHex 5 => "05" 哪些库/函数允许这个? 我遇到了Numeric模块及其showIntAtBase函数,但无法正确使用它。 > :t showIntAtBase showIntAtBase :: (Integral a) => a -> (Int -> Char) -> a -> String -> String

在Haskell中有没有一种很好的方法来使函数签名更加丰富?

我意识到这可能被认为是一个主观的或者是一个偏离主题的问题,所以我希望不要把它closures,否则会被迁移,也许会被程序员所接受。 我开始学习Haskell,主要是为了我自己的启发,我喜欢支持这种语言的很多想法和原则。 在和Lisp一起玩语言理论课之后,我开始对函数式语言着迷,而且我也听到很多关于Haskell的生产能力的好消息,所以我想我会自己调查一下。 到目前为止,我喜欢这种语言,除了我无法摆脱的一件事情:那些母亲正在执行function签名。 我的专业背景主要是做OO,特别是在Java。 我曾经工作过的大部分地方都有许多标准的现代教条。 敏捷,Clean Code,TDD等。经过这几年的工作,它已经成为我的舒适区; 特别是“好”的代码应该是自我logging的思想。 我已经习惯了在IDE中工作,在这个IDE中,具有非常具有描述性签名的冗长冗长的方法名称对于智能自动完成和用于导航程序包和符号的大量分析工具来说是不成问题的; 如果我可以在Eclipse中按Ctrl + Space,然后通过查看其名称和与其参数相关联的局部范围variables(而不是拉起JavaDocs)来推断出一种方法正在做什么,我就像一头猪一样快乐。 这肯定不是哈斯克尔社区最佳实践的一部分。 我已经阅读了很多关于这个问题的不同意见,我知道Haskell社区认为它的简洁性是一个“专业”。 我已经阅读了如何阅读Haskell ,我理解很多决定背后的原理,但这并不意味着我喜欢它们。 一个字母的variables名等等对我来说都不好玩。 我承认,如果我想继续使用这种语言,我必须习惯这一点。 但我无法克服function签名。 拿这个例子来说,从学习Haskell […]的函数语法部分: bmiTell :: (RealFloat a) => a -> a -> String bmiTell weight height | weight / height ^ 2 <= 18.5 = "You're underweight, you emo, you!" | weight / height ^ 2 […]

我怎样才能使用HaskellDB多态字段? (重叠实例的问题)

我有一个有六种不同types实体的模式,但是他们都有很多共同点。 我想我可能可以在types级别抽象出很多这种通用性,但是我碰到了HaskellDB和重叠实例的问题。 这是我开始的代码,它工作正常: import Database.HaskellDB import Database.HaskellDB.DBLayout data Revision a = Revision deriving Eq data Book = Book instance FieldTag (Revision a) where fieldName _ = "rev_id" revIdField :: Attr (Revision Book) (Revision Book) revIdField = mkAttr undefined branch :: Table (RecCons (Revision Book) (Expr (Revision Book)) RecNil) branch = baseTable "branch" $ hdbMakeEntry undefined […]

使用FFI声明时GHCi运行时链接程序问题

我对Haskell的FFI和GHC的交互模式有一个问题。 考虑FFISo.hs : {-# LANGUAGE OverloadedStrings #-} module Main where import qualified Data.ByteString.Char8 as B import FFIFun.Foo main :: IO () main = do B.putStrLn "main" callMeFromC callMeFromHaskell return () cc : #include <stdio.h> void callMeFromC(void); void callMeFromHaskell(void) { printf("callMeFromHaskell\n"); callMeFromC(); } FFIFun/Foo.hs : {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ForeignFunctionInterface #-} module FFIFun.Foo where […]

Haskellunit testing

我是新来的haskell和unit testing工作,但我觉得生态系统是非常混乱。 我对HTF和HUnit之间的关系感到困惑。 在一些例子中,我看到你设置了testing用例,将它们导出到testing列表中,然后用runTestsTT在ghci中运行(就像这个HUnit例子 )。 在其他的例子中,你创build一个绑定到cabal文件中的testing运行器,使用一些预处理器魔法来find你的testing,就像这个git的例子 。 也似乎HTFtesting需要前缀test_或他们不运行? 我很难find任何文件,我只注意到每个人的模式。 无论如何,有人可以帮我解决这个问题吗? 什么被认为是在Haskell中做事的标准方式? 什么是最佳实践? 什么是最容易build立和维护?

Haskell运算符允许使用哪些字符?

是否有一个允许的字符的完整列表,或者是一个规则,确定可以在标识符与操作符中使用的内容?

为什么Haskell中没有隐含的并行性?

Haskell是function性和纯粹的,所以基本上它具有编译器能够处理隐式并行所需的所有属性。 考虑这个微不足道的例子: f = do a <- Just 1 b <- Just $ Just 2 — ^ The above line does not utilize an `a` variable, so it can be safely — executed in parallel with the preceding line c <- b — ^ The above line references a `b` variable, so it can only […]

有没有一个函数来扁平元素的嵌套列表?

我该如何扁平化一个嵌套列表: [1, 2, 3, 4] == flatten [[[1,2],[3]],[[4]]]