haskell相关内容
函数式语言很好,因为它们通过消除状态来避免错误,还因为它们可以轻松地自动为您并行化,而您不必担心线程数. 作为一名 Win32 开发人员,我可以将 Haskell 用于我的应用程序的某些 dll 吗?如果我这样做了,我是否会自动获得真正的优势?如果是这样,是什么给了我这个优势,编译器? F# 是否会自动为您并行化您跨多个内核和 CPU 编写的函数?您会看到任务管理器中的线程数增加吗?
..
http://www.vex.net/~trebla/haskell/so.xhtml描述如何编译共享库. 关于编译命令: ghc -O2 -dynamic -shared -fPIC -o libEval.so Eval.hs hsbracket.c -lHSrts-ghc7.6.3 它说: (你可以省略 -dynamic 来请求其他包的静态库吗?不是真的,它们不是用 -fPIC
..
出于好奇,为什么是下面的程序 1 = 0“你好"=“世界" 有效且可由 GHC 编译?这仅仅是一个错误还是一个功能?谢谢! 解决方案 这是允许的,因为它是语言规则的自然结果,并没有大到足以在语言规范中设置特殊情况来阻止它的问题. > 自然后果 有两种标准的定义:函数定义和数据定义.在函数定义中,你可以在等号左边写模式作为函数的参数.在数据定义中,您可以在等号左侧单独编写模式以匹配
..
我很难理解这一点.用do表示法书写时,下面两行有什么不同? 1.让 x = 表达式2. x 我看不到.有时一个有效,有时另一个.但很少两者兼而有之.“Learn you a haskell"表示
..
我有以下代码示例: {-# LANGUAGE ScopedTypeVariables #-}主要 = 做putStrLn "请输入一个数字 a:"a :: Int
..
我遇到了 IO 未按顺序执行的问题,即使在 do 构造中也是如此. 在下面的代码中,我只是跟踪剩下的牌,其中牌是一组字符(一个用于花色,一个用于价值),然后不断询问用户已打出哪些牌.我希望 putStr 在每个输入之间执行,而不是像现在这样在最后执行. module Main wheremain = doLoop 卡片doLoop xs = do putStr $ show xss [卡]
..
我有以下代码: 导入 Control.Monad硬币 :: MonadPlus m =>薄荷硬币 = 返回 0 `mplus` 返回 1 如果我在解释器上计算 coin :: Maybe Int,它会显示 Just 0.这是正常的,因为 May 是作为 MonadPlus 的实例实现的. 如果我在解释器上计算 coin :: [Int],它会打印 [0, 1],因为 mplus 的实现列
..
我是 Haskell 的新手,在理解它的一些概念时遇到了一些困难. 在玩 IO 时,我想扁平化一个 IO [[String]]. 我尝试过的示例: module DatabaseTestSO where导入数据库.HDBC导入数据库.HDBC.MySQL导入 Data.FoldableconvSqlValue :: [SqlValue] ->[细绳]convSqlValue xs =
..
我在 haskell 中有两个线程来执行 IO.(他们只打印).类似于以下内容: thread1 :: IO()thread1 = putStrLn "一"线程 2 :: IO ()thread2 = putStrLn "两个" 我目前得到的结果如下: OnTwoe奥特威 如何确保每个线程都原子地完成其 IO? 解决方案 使用同步变量来确保对资源的原子访问.一个简单的方法是使用 M
..
我想简单地将 UTF-8 编码的数据输出到控制台,我快疯了. 我已经使用 String 成功地完成了这项工作,但现在我想用 ByteString 来做同样的事情.有没有好的快速的方法来做到这一点? 这是我到目前为止所得到的,但它不起作用: import Prelude 隐藏(putStr)导入 Data.ByteString.Char8 (putStr, pack)主要:: IO()
..
我正在学习 Haskell Lazy IO. 我正在寻找一种优雅的方式来复制大文件 (8Gb),同时将复制进度打印到控制台. 考虑以下简单的程序,它可以静默复制文件. module Main where导入系统将合格的 Data.ByteString.Lazy 导入为 Bmain = do [from, to] 想象一下你想用一个回调函数来报告: onReadBytes ::
..
我试图弄清楚基本的 IO Haskell 函数是如何定义的,所以我使用了 这个参考,我得到了 putChar 函数定义: putChar :: Char ->输入口 ()putChar = primPutChar 然而,现在我无法在任何地方找到有关此 primPutChar 函数的更多信息.也许它可能指的是一个预编译的函数,可以从共享对象中作为二进制文件使用?如果是这样,是否可以查看其源代码?
..
每个其他 monad 都带有一个转换器版本,据我所知,转换器的想法是 monad 的通用扩展.按照其他转换器的构建方式,IOT 将类似于 newtype IOT m a = IOT { runIOT :: m (IO a) } 我可以在现场制作有用的应用程序:IOT Maybe 可以做一个 IO 动作或什么都不做,IOT [] 可以建立一个列表,以后可以成为 sequenced. 那么为
..
我想将 [1,2,3,4] 转换为 [[1 2] [2 3] [3 4]] 或 [(1 2) (2 3) (3 4)].在 clojure 我有 (partition 2 1 [1,2,3,4]).我怎样才能在haskell中做到这一点?我怀疑标准api中有这样的功能,但我找不到. 解决方案 为此的标准技巧是使用它自己的 tail zip 列表: >让 xs = [1,2,3,4] in
..
我最近在网上阅读了一些关于函数式编程的文章,我想我对它背后的概念有了基本的了解. 我很好奇涉及某种状态的日常编程问题是如何用纯函数式编程语言解决的. 例如:《C 编程语言》一书中的字数统计程序如何用纯函数式语言实现? 欢迎任何贡献,只要解决方案是纯函数式的. 这是书中的字数统计 C 代码: #include #define IN 1/* 在一个单词内 */#define
..
更广泛地说,这个问题是关于表达问题的各种方法.这个想法是你的程序是数据类型和对它的操作的组合.我们希望能够在不重新编译旧类的情况下添加新案例. 现在 Haskell 有一些非常棒的解决方案来解决表达式问题 和 TypeClass.特别是 - 我们可以: class Eq a where(==) :: a ->->布尔值(/=) :: a ->->布尔值成员 :: (Eq a) =>->[a
..
我想知道是否有不特定于语言的 REPL.我花了很多时间研究 REPL(主要用于 Clojure、Scala 和 Haskell),而捆绑的那些或多或少都让我感到沮丧.REPL 的工作似乎非常通用,因为它们: 阅读:获取用户输入 评估:将输入传递给某个运行时进行处理 打印:将结果打印到屏幕上 循环:等待下一个用户输入 我不明白为什么不应该有一些与语言无关的 REPL,但我一直找不到
..
在 Scala 中,代数数据类型被编码为 sealed 一级类型层次结构.示例: -- Haskell数据定位 a = 追加|AppendIf (a -> Bool)|显式 ([a] -> [a]) //Scala密封特质定位[A]case object Append extends Positioning[Nothing]case class AppendIf[A](condition: A
..
嗨,我从 haskell 开始,并尝试为它的开发设置我的 emacs. 我在 emacs 24.3.1 中有最新的 haskell-mod 和 ghc-mod.GHC 是 7.6.3 我已经创建了一个 haskell 文件 first.hs,当我做 C-c C-l它问: 启动一个名为 haskell 的新项目?是或否 我的目录名是haskell.我按y 设置cabal目录 我已
..
我在 emacs 中安装了 haskel-mode.然后我在我的 .emacs 中写: (加载“~/.emacs.d/haskell-mode/haskell-site-file")(添加钩子'haskell-mode-hook'打开-haskell-doc-mode)(添加钩子'haskell-mode-hook'打开-haskell-indentation)(添加钩子'haskell-mod
..