Questions tagged «haskell»

Haskell是一种功能性编程语言,具有强大的静态类型,惰性评估,广泛的并行性和并发支持以及独特的抽象功能。



1
使用c2hs与结构和匿名联合接口
如何将这部分C代码编码到.chs文件中,以便c2hs可以将其转换为相对不错的东西? typedef enum { MONOME_BUTTON_UP = 0x00, MONOME_BUTTON_DOWN = 0x01, MONOME_ENCODER_DELTA = 0x02, MONOME_ENCODER_KEY_UP = 0x03, MONOME_ENCODER_KEY_DOWN = 0x04, MONOME_TILT = 0x05, /* update this if you add event types */ MONOME_EVENT_MAX = 0x06 } monome_event_type_t; typedef struct monome monome_t; /* opaque data type */ typedef struct monome_event monome_event_t; typedef …
100 haskell  c2hs 

1
Elm编译器永远运行,计算机越来越热
我不确定是什么引起了这个问题,但是在一个正在构建的项目中,编译器仅花费几个小时就可以编译模块。我的代码库的总大小为352KB,但是没有一个模块的大小超过10KB。我正在使用本机端口,但这非常琐碎。我只是拿它Date.now()。 有什么众所周知的东西会导致elm编译器永久编译吗?我没有很多依赖关系,但是我经常使用HTML。我真的很感谢任何提示会导致这种情况。 编辑 因此,事实证明,大写表达式会导致优化器花费很长时间,从0.16开始。这是有关Elm-Discuss提出问题的讨论,以及令人讨厌的案例比赛的要点。 我猜是很冗长的,要保留一个胡萝卜,为什么榆木的编译器会采用这种方式进行大小写匹配?这里发生的底层机制是什么?为什么在case语句上优化60多个模式匹配,编译器会花费一个多小时?

2
类型检查器允许非常错误的类型替换,并且程序仍然可以编译
在尝试调试程序中的问题时(使用Gloss将2个半径相等的圆绘制为不同的大小*)时,我偶然发现了一个奇怪的情况。在我处理对象的文件中,我对a具有以下定义Player: type Coord = (Float,Float) data Obj = Player { oPos :: Coord, oDims :: Coord } 在导入Objects.hs的主文件中,我具有以下定义: startPlayer :: Obj startPlayer = Player (0,0) 10 发生这种情况是由于我添加和更改了玩家的字段,然后忘记了更新startPlayer(它的尺寸由一个数字来表示半径,但是我将其更改为一个Coord表示(宽度,高度);以防万一玩家对象是非圆形)。 令人惊讶的是,尽管第二个字段的类型错误,但是上面的代码仍可以编译并运行。 我首先以为可能打开了不同版本的文件,但是对任何文件的任何更改都反映在已编译的程序中。 接下来,我认为也许startPlayer由于某种原因而没有被使用。注释掉会startPlayer产生编译器错误,甚至很奇怪,更改10in startPlayer会导致适当的响应(更改的起始大小Player);再次,尽管它是错误的类型。为了确保它正确地读取了数据定义,我在文件中插入了一个错字,这给了我一个错误。所以我在看正确的文件。 我尝试将上面的2个代码段粘贴到自己的文件中,它吐出了Playerin 的第二个字段startPlayer不正确的预期错误。 有什么可能允许这种情况发生?您可能认为这是Haskell的类型检查器应避免的事情。 * 我最初的问题的答案是,两个半径相等的圆被绘制成不同的大小,这是因为其中一个半径实际上是负数。
99 haskell  types 

5
什么是索引单子?
什么是索引式monad以及此monad的动机? 我已经读过它有助于跟踪副作用。但是类型签名和文档并没有带我到任何地方。 它将如何帮助跟踪副作用(或任何其他有效的例子)的例子是什么?
98 haskell  monads 



6
Data.Void中荒谬的功能有什么用?
中的absurd函数Data.Void具有以下签名,其中Void是该软件包导出的逻辑上无人居住的类型: -- | Since 'Void' values logically don't exist, this witnesses the logical -- reasoning tool of \"ex falso quodlibet\". absurd :: Void -> a 我确实知道有足够的逻辑来获取文档说明,即通过命题即类型对应关系,它对应于有效公式⊥ → a。 我感到困惑和好奇的是:此函数在哪种实际编程问题中有用?我认为这在某些情况下可能是有用的,因为它是穷举处理“不可能发生”的情况的类型安全方式,但我对Curry-Howard的实际用法还不了解,无法确定该想法是否在完全正确。 编辑:最好在Haskell中使用示例,但是如果有人想使用依赖类型的语言,我不会抱怨...


1
什么是同态?
通过阅读这个经典论文,我卡上paramorphisms。不幸的是,该部分很薄,并且Wikipedia页面什么也没说。 我的Haskell翻译是: para :: (a -> [a] -> b -> b) -> b -> [a] -> b para f base = h where h [] = base h (x:xs) = f x xs (h xs) 但是我不认为-我对类型签名或所需结果没有任何直觉。 什么是同质性,有什么有用的例子在起作用? 是的,我已经看过这些 问题,但是它们并没有直接涵盖同质性,仅指向了可能对参考有用的资源,但对学习材料却没有帮助。

3
如何在Haskell中玩Control.Monad.Writer?
我是函数编程的新手,并且最近在Learn Has a Haskell中学习,但是当我读完本章时,我陷入了以下程序: import Control.Monad.Writer logNumber :: Int -> Writer [String] Int logNumber x = Writer (x, ["Got number: " ++ show x]) multWithLog :: Writer [String] Int multWithLog = do a <- logNumber 3 b <- logNumber 5 return (a*b) 我将这些行保存在.hs文件中,但未能将其导入到我的ghci中,抱怨如下: more1.hs:4:15: Not in scope: data constructor `Writer' …
96 haskell  monads 

1
Haskell导出当前模块和其他导入模块
是否可以在Haskell中编写模块,该模块除了导出内部所有可见内容外,还重新导出模块? 让我们考虑以下模块: module Test where import A f x = x 此模块导出内部定义的所有内容,因此它导出f但不重新导出从导入的任何内容A。 另一方面,如果我想重新导出模块A: module Test ( module A, f ) where import A f x = x 有没有一种方法可以重新导出A和导出其中定义的所有内容,Test而无需显式编写其中定义的每个函数Test?
96 haskell  module  export 

9
Haskell离线文档?
为Haskell核心库(甚至更多)获得脱机文档的可能性(如果有)? 有时,我将笔记本电脑带到没有wifi的咖啡店,如果有Hoogle之类的东西但可以离线使用,那会很好。

1
Yesod的例外
我创建了一个使用非常原始形式的守护程序ipc(远程登录并发送具有按特定顺序包含某些单词的String)。我抢购了它,现在正在使用它将JSON消息传递到Yesod服务器。但是,对于我的设计,我确实有一些特别喜欢的东西,而且我不确定现在的选择。 这是我在做什么: buildManager :: Phase -> IO () buildManager phase = do let buildSeq = findSeq phase jid = JobID $ pack "8" config = MkConfig $ Just jid flip C.catch exceptionHandler $ runReaderT (sequence_ $ buildSeq <*> stages) config -- ^^ I would really like to keep the above …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.