标签: haskell-platform

如何阅读GHC核心"证据"?

我写了一小部分Haskell来弄清楚GHC如何证明对于自然数,你只能将偶数的一半:

{-# LANGUAGE DataKinds, GADTs, KindSignatures, TypeFamilies #-}
module Nat where

data Nat = Z | S Nat

data Parity = Even | Odd

type family Flip (x :: Parity) :: Parity where
  Flip Even = Odd
  Flip Odd  = Even

data ParNat :: Parity -> * where
  PZ :: ParNat Even
  PS :: (x ~ Flip y, y ~ Flip x) => ParNat x -> ParNat (Flip x)

halve :: ParNat Even -> Nat
halve PZ     = Z
halve …
Run Code Online (Sandbox Code Playgroud)

haskell formal-verification proof ghc haskell-platform

84
推荐指数
1
解决办法
1242
查看次数

Haskell/GHCi - 从不同目录加载模块

我的haskell应用程序具有以下目录结构:

src/
    utils/Utils.hs
    subsystem/Subsystem.hs
Run Code Online (Sandbox Code Playgroud)

Subsystem模块导入Utils模块.我想在GHCi中手动测试这段代码.

问题是GHCi似乎只是在'.'(当前目录)中寻找可用的模块,所以我复制Utils.hs到子系统文件夹并且能够进行手工测试Subsytem.hs.有一个更好的方法吗?例如,我想在src目录中启动GHCi ,让它搜索模块./utils./subsystem目录.我可以指定GHCi的模块路径吗?

haskell ghci haskell-platform

28
推荐指数
3
解决办法
8322
查看次数

Haskell程序输出`<< loop >>`

我写了一个Haskell程序,它在列表上执行二进制搜索.至少这就是我的想法.当我用程序编译程序ghc v7.6.3并运行程序时,我得到了以下输出:

progname: <<loop>>
Run Code Online (Sandbox Code Playgroud)

这个输出究竟意味着什么?这是否意味着我有一个无限循环ghc优化了?我该怎么调试呢?

debugging haskell compilation ghc haskell-platform

27
推荐指数
1
解决办法
5358
查看次数

GHC/Haskell平台安装的所有地方

假设我想完全重新安装GHC/HP.我想(尽可能多的迷信)删除以前的安装中的任何东西.我实际需要删除什么(以及在哪里)?

编辑:我在OSX上,但是如果这些信息一般适用于所有系统,我会更好奇.

编辑2:到目前为止,我们有:

OSX:
/Library/Frameworks/GHC.framework/
〜/ .cabal/
在/ usr/bin中/ -符号链接

我将添加(基于此处定义的"前缀":http://www.vex.net/~trebla/haskell/sicp.xhtml#storage):
前缀/ lib/
前缀/共享/
前缀/ bin/
前缀/ share/doc/
/ usr(/ local)/ lib/[ghc-version]
/ usr(/ local)/ share/doc/ghc/html/libraries/ - documentation
/ usr(/ local)/ share/doc/ghc/
/ usr(/ local)/ bin
/ var/lib/[ghc-version]
/ etc/[ghc-version]
〜/ .ghc /

编辑3:
OS X:
〜/ Library/Haskell

Linux:
??

Windows:
??

haskell ghc haskell-platform

26
推荐指数
3
解决办法
9792
查看次数

如何在Haskell中创建运算符?

制作一个三元逻辑表,我想为我将调用的运算符创建自己的函数<=>.

所以,例如,我想这样做,但那是不对的.这样做的正确方法是什么?

data Ternary = T | F | M
deriving (Eq,  Show, Ord)

<=> :: Ternary -> Ternary -> Ternary
<=> T F = F
<=> T T = T
<=> T M = M
<=> F F = T
<=> F T = F
<=> F M = M
<=> M F = M
<=> M T = M
<=> M M = T
Run Code Online (Sandbox Code Playgroud)

haskell haskell-platform haskelldb

26
推荐指数
2
解决办法
1万
查看次数

26
推荐指数
1
解决办法
4133
查看次数

用于HTTP通信的Haskell库

什么是涉及HTTP请求的Web客户端编程的推荐库.

我知道有一个名为HTTP的软件包,但它似乎不支持HTTPS.它有更好的图书馆吗?

我期待着与功能,就像一个图书馆这样 Haskell的.

haskell haskell-platform

22
推荐指数
3
解决办法
3582
查看次数

在Haskell平台中进行语言环境的首选方法

Haskell平台包括两个过时的库,old-timeold-locale.对于旧时,它还包括首选替代方案(即time),但我无法弄清楚推荐的替代方案old-locale是什么.

这仅仅是截至目前的平台(版本2010.1.0.0)的缺点,还是我忽略的东西?

haskell localization internationalization haskell-platform

21
推荐指数
1
解决办法
1067
查看次数

Haskell中最重要的抽象是什么?单子?Applicatives?

我想知道我应该知道哪些库,函数和概念以及如何使用.Monad和那里的函数是典型的例子,但是在编码中还有其他好的原语,比如Arrows,Applicative,......他们是谁?

顺便说一下,我想在Haskell世界中了解最新情况,学习新概念,这是怎么做到的?

(最初的标题是:"用于编码的库原语",但这已被更改)

haskell haskell-platform

20
推荐指数
3
解决办法
3183
查看次数

Haskell平台:嵌套函数和优化

在haskell平台的许多功能的实现中有一个非常常见的模式困扰我,但我无法找到解释.它是关于使用嵌套函数进行优化的.

嵌套函数在where子句用于进行尾递归的原因对我来说非常清楚(如长度),但内部函数与顶级函数具有完全相同类型的目的是什么?例如,它发生在Data.Set模块的许多功能中,如下所示:

-- | /O(log n)/. Is the element in the set?
member :: Ord a => a -> Set a -> Bool
member = go
  where
    STRICT_1_OF_2(go)
    go _ Tip = False
    go x (Bin _ y l r) = case compare x y of
          LT -> go x l
          GT -> go x r
          EQ -> True
#if __GLASGOW_HASKELL__ >= 700
{-# INLINABLE member #-}
#else
{-# INLINE member #-}
#endif
Run Code Online (Sandbox Code Playgroud)

我怀疑它可能与memoization有关,但我不确定.


编辑 …

optimization haskell haskell-platform

20
推荐指数
2
解决办法
1053
查看次数