小编som*_*unt的帖子

如何在cabal-dev中使用runhaskell?

不幸的是cabal-dev ghci在这个项目中不起作用,我收到一个错误:

Loading package download-0.3.2 ... linking ... 
ghc: /home/stulli/haskell/ifdl/cabal-dev//lib/download-0.3.2/ghc-7.4.1/HSdownload-0.3.2.o: unknown symbol `stat64'
ghc: unable to load package `download-0.3.2'
Run Code Online (Sandbox Code Playgroud)

所以我尝试runhaskell,但它使用随cabal而不是cabal-dev安装的软件包因​​此失败.

更新:runhaskell产生相同的错误:

$ runhaskell -isrc:src/test -package-conf=cabal-dev/packages-7.4.1.conf src/test/Test.hs
Test.hs: /home/stulli/haskell/ifdl/cabal-dev//lib/download-0.3.2/ghc-7.4.1/HSdownload-0.3.2.o: unknown symbol `stat64'
Test.hs: Test.hs: unable to load package `download-0.3.2'
Run Code Online (Sandbox Code Playgroud)

另一方面,cabal-dev安装没有问题.

haskell cabal runhaskell

17
推荐指数
2
解决办法
3276
查看次数

模糊的模块名称`Prelude'

当我想重新编译xmonad以更改配置时,我得到了这个:

Implicit import declaration:
    Ambiguous module name `Prelude':
      it was found in multiple packages: base haskell98-2.0.0.0
Run Code Online (Sandbox Code Playgroud)

Xmonad是通过pacman安装的.当我收到此错误时,我从pacman中删除了xmonad,然后尝试安装xmonad.我再次得到了上述错误但我能够通过从cabal文件中删除haskell98来解决它.

现在我想用MOD-Q重新配置xmonad错误再次出现,我不知道如何解决这个问题.任何帮助赞赏.

我使用GHC 7.0.3版(来自Haskell平台)

haskell xmonad

14
推荐指数
1
解决办法
3746
查看次数

我怎么应该使用包haskell-type-exts?

我试图检查作为字符串提供的代码片段.

我发现包haskell-type- exts(hackage link)似乎提供了我需要的东西:用parseModuleAST构建typecheckModule可以应用的.但后来我不知道如何处理结果.这类型的Tc VarEnv地方Tc是一个单子.

该软件包提供了一个测试用例,其中使用了类似的东西:

ea <- runTc testEnv $ typecheckExp e
Run Code Online (Sandbox Code Playgroud)

但是runTc在一个隐藏的模块中,所以我不能使用它.这是我到目前为止的代码:

import Language.Haskell.Exts.Parser (parseModule, ParseResult(..))
import Language.Haskell.TypeCheck.TypeCheck
-- import Language.Haskell.TypeCheck.Monad  --hidden module

main = do
    let m = "myTest = map (+1) [1..10]"
    let r = parseModule m
    case r of
         ParseOk res -> printStuff res
         _ -> print "wtf"

printStuff r = do
    let Right tc = return $ typecheckModule r
--    print …
Run Code Online (Sandbox Code Playgroud)

haskell typechecking

13
推荐指数
1
解决办法
218
查看次数

我如何在状态monad中使用Debug.Trace.trace?

我想跟踪状态monad的变化.这不起作用:

main :: IO ()
main = do
    print $ snd $ execState compute initialState

traceThis :: (Show a) => a -> a
traceThis x = trace ("test: " ++ show x) x

compute :: State ([Row], Integer) String
compute = liftM traceThis $ get >>= \(rs, result) -> put (rs, result + 3) >> return "foo"
Run Code Online (Sandbox Code Playgroud)

没有打印任何内容(除了主函数中已正确更新的打印的最终结果).

跟踪状态的任何想法或替代方案?我想用它来检查项目euler解决方案的正确性.

haskell

8
推荐指数
3
解决办法
1723
查看次数

XhrRequest with reflex/reflex-dom

我想执行一个基本的Ajax请求,就是这样.

reflex用于前端和Scotty后端.Firefox Web控制台告诉我请求是成功的,我在那里看到了预期的结果.但网站切换Just "default"Nothing而不是Just "success!".

这是一个完整的最小例子:

import Reflex (holdDyn)
import Reflex.Dom (button, el, mainWidget, display)
import Reflex.Dom.Xhr (performRequestAsync, xhrRequest, decodeXhrResponse)
import Reflex.Class (tag, constant)
import Data.Default (def)

main :: IO ()
main = do
  mainWidget $ el "div" $ do
    buttonEvent <- button "click me"
    let defaultReq = xhrRequest "GET" "mystring" def  --served by Scotty
    asyncEvent <- performRequestAsync (tag (constant defaultReq) buttonEvent)
    buttonDyn <- holdDyn (Just "default") $ fmap decodeXhrResponse …
Run Code Online (Sandbox Code Playgroud)

haskell ghcjs reflex

7
推荐指数
1
解决办法
897
查看次数

什么是__flexarr以及c程序员如何/为何使用它?

sys/inotify.h(inotify.h)中,定义了以下结构:

struct inotify_event
{
  int wd;               /* Watch descriptor.  */
  uint32_t mask;        /* Watch mask.  */
  uint32_t cookie;      /* Cookie to synchronize two events.  */
  uint32_t len;         /* Length (including NULs) of name.  */
  char name __flexarr;  /* Name.  */
};
Run Code Online (Sandbox Code Playgroud)

__flexarr在代码中找不到任何定义.我在哪里搜索它?

在一个不相关的项目中,我发现#define __flexarr [1]我认为它做了类似的事情,但这个定义对我来说没有多大意义(对C非常不熟悉).

我唯一知道的是你可以在其中存储不同长度的字符串,但我完全不了解它是如何/为何起作用的.

有人在乎解释吗?谢谢.

c

6
推荐指数
1
解决办法
941
查看次数

如何防止在Yesod中缓存静态文件?

我使用脚手架网站,每当我在静态javascript文件中更改内容时,我必须停止开发服务器并执行'cabal install && yesod devel'以使更改生效.

有没有办法使用正常的 js/css而不是缓存版本,所以我不需要一直重新编译?

haskell yesod

5
推荐指数
1
解决办法
588
查看次数

Rust示例:ref模式

我在理解refRust中的模式时遇到了问题.我指的是https://rustbyexample.com/scope/borrow/ref.html

这是我不明白的代码:

let point = Point { x: 0, y: 0 };

let _copy_of_x = {
    // `ref_to_x` is a reference to the `x` field of `point`
    let Point { x: ref ref_to_x, y: _ } = point;

    // Return a copy of the `x` field of `point`
    *ref_to_x
};
Run Code Online (Sandbox Code Playgroud)

我得到的是最后一个let表达式(?)是某种模式匹配.所以我的理解ref ref_to_x应该等于原始0x价值point.

但我不明白ref实际上是做什么的.当我添加这样的代码时:

println!("x: {}", point.x);
println!("ref_to_x: {}", ref_to_x);
println!("*ref_to_x: {}", *ref_to_x);
Run Code Online (Sandbox Code Playgroud)

我总是得到0,所以似乎没有区别.不知何故,我希望 …

rust

5
推荐指数
2
解决办法
2210
查看次数

如何避免使用GADT实现多个功能?

首先,这是我的代码的最小示例:

{-# LANGUAGE GADTs #-}

-- package "url"
import Network.URL (exportURL, URL(..), URLType(..))

data MyURL a where
    GalleryURL :: URL -> MyURL URL
    PictureURL :: URL -> MyURL URL

url = URL { url_type = PathRelative, 
            url_path = "www.google.com", 
            url_params = []}

galleryURL = GalleryURL url

myExportURL :: MyURL a -> String
myExportURL (GalleryURL a) = exportURL a
myExportURL (PictureURL a) = exportURL a

main = print $ myExportURL galleryURL
Run Code Online (Sandbox Code Playgroud)

我使用GADT来避免混合不同类型的URL.myExportURL所有类型的URL 的功能都相同.有没有办法使用这样的东西:

myExportURL (_ a) = exportURL a …
Run Code Online (Sandbox Code Playgroud)

haskell gadt

3
推荐指数
2
解决办法
213
查看次数

标签 统计

haskell ×7

c ×1

cabal ×1

gadt ×1

ghcjs ×1

reflex ×1

runhaskell ×1

rust ×1

typechecking ×1

xmonad ×1

yesod ×1