小编dev*_*vel的帖子

Haskell中的异常处理

我需要帮助来理解三个Haskell函数的用法

  • 试试(Control.Exception.try :: Exception e => IO a -> IO (Either e a))
  • catch(Control.Exception.catch :: Exception e => IO a -> (e -> IO a) -> IO a)
  • handle(Control.Exception.handle :: Exception e => (e -> IO a) -> IO a -> IO a)

我需要知道几件事:

  1. 我什么时候使用哪个功能?
  2. 如何使用此函数的一些简单示例?
  3. 捕获和处理之间的区别在哪里?它们具有几乎相同的签名,只有不同的顺序.

我会写下我的试验,希望你能帮助我:

尝试

我有一个例子:

x = 5 `div` 0
test = try (print x) :: IO (Either SomeException ())
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 如何设置自定义错误输出?

  2. 我该怎么做才能将所有错误都设置为SomeException,所以我不必编写 :: IO (Either SomeException())

捕获/试

你能给我看一个自定义错误输出的简短例子吗?

haskell exception-handling

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

链接错误"未定义引用`__gxx_personality_v0'"和g ++

可能重复:
链接上的未定义符号___gxx_personality_v0

我有以下程序的问题.

// fkt.cpp

#include "fkt.h"

int add2(int a, int b)
{
    return a+b;
}
Run Code Online (Sandbox Code Playgroud)

标题:

// fkt.h

int add2(int a, int b);
Run Code Online (Sandbox Code Playgroud)

现在我编译它:

g++ -c fkt.cpp
Run Code Online (Sandbox Code Playgroud)

现在我跑了nm,得到:

00000000 T _Z6add2ii
         U __gxx_personality_v0
Run Code Online (Sandbox Code Playgroud)

当我想在任何地方使用该函数时:

(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?(我正在使用Ubuntu Linux.)

c++ g++

73
推荐指数
2
解决办法
15万
查看次数

hsc2hs和c2hs之间的区别?

hsc2hs和c2hs有什么区别?

我知道hsc2hs是一个预处理器,但它到底是做什么的?

c2hs可以用C代码制作Haskell模块,但是我需要hsc2hs吗?

haskell ffi hsc2hs c2hs

23
推荐指数
2
解决办法
3137
查看次数

如何在Haskell中抛出异常并退出程序?

我有一个问题:如何抛出异常并退出程序?我写了一个简单的例子:

-- main.hs
import Test

main = do
    Test.foo ""
    putStrLn "make some other things"
Run Code Online (Sandbox Code Playgroud)

这是模块:

moldule Test where

foo :: String -> IO ()
foo x = do
    if null x
    then THROW EXCEPTION AND EXIT MAIN else putStrLn "okay"
Run Code Online (Sandbox Code Playgroud)

我想启动它并抛出异常并退出程序,但是如何?

haskell exception throw

17
推荐指数
1
解决办法
7475
查看次数

需要知道<*> <$>和.在哈斯克尔做

嗨伙计可以有人解释我作为一个haskell noob运营商:

(.) :: (b -> c) -> (a -> b) -> a -> c
(<$>) :: Functor f => (a -> b) -> f a -> f b
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

做?当我看到签名时,我什么都不知道,通过一个简单易懂的解释来帮助我.

haskell

10
推荐指数
2
解决办法
3885
查看次数

从Haskell中的系统命令读取输入

嗨我需要在执行haskell命令后读取命令行 标准,我知道有两个模块来执行系统命令:System.CmdSystem.Process

任何人都可以给我一个简单的例子来运行这些System.Process函数吗?

这里是我需要做的一个例子(我知道有System.Directory这样做,但我认为这是一个很好的例子):

  1. 执行类似的系统命令 ls -a
  2. 现在我不希望用户看到输出
  3. 输出应该只能在我的程序中访问以验证它

我怎样才能做到这一点?

io haskell system process

9
推荐指数
1
解决办法
2552
查看次数

小haskell libClang的例子?

任何人都可以在haskell中向我展示一个小的libClang示例吗?

我有文档,但不知道从哪里开始.

一个小例子会很好

haskell clang

8
推荐指数
1
解决办法
1252
查看次数

如何使用hsc2hs绑定到常量,函数和数据结构?

我需要一个例子如何使用hsc2hs,我想当我写一个头文件,如:

// foo.h
#define PI 3.14159

typedef struct {
    int i1;
    int i2;
} foo;

struct foo2 {
    int i1;
    int i2;
};

int fooFkt(foo f);
Run Code Online (Sandbox Code Playgroud)

然后创建一个像以下一样的hsc文件:

import Foreign
import Foreign.C

#include "foo.h"
Run Code Online (Sandbox Code Playgroud)

用途hsc2hs:

{-# INCLUDE "foo.h" #-}
{-# LINE 1 "test.hsc" #-}
import Foreign
{-# LINE 2 "test.hsc" #-}
import Foreign.C


{-# LINE 5 "test.hsc" #-}
Run Code Online (Sandbox Code Playgroud)

我不明白,我认为帽子hsc2hs会像我一样为我导入所有需要的东西 PI

谁能给我一个更好的例子?

haskell ffi hsc2hs

8
推荐指数
1
解决办法
2023
查看次数

如何使用Haskell访问某些XML数据(使用HaXml)?

我希望能够访问XML文件的数据

<?xml version="1.0"?>
<MY>
  <Foo id="1" name="test">
    <Argument name="a" />
  </Foo>
  <Foo id="2" name="test2">
    <Argument name="a" />
    <Argument name="b" />
  </Foo>
  <Other id="2" name="someOther"/>
</MY>
Run Code Online (Sandbox Code Playgroud)

我想例如用它的参数读出每个Foo,我怎么能用Haskell做到这一点?(我想使用HaXml模块)

我不知道从哪里开始.

xml haskell haxml

7
推荐指数
3
解决办法
2246
查看次数

搜索C++的BNF(for yacc)语法

我在这里发现了类似的东西:在哪里可以找到C++语言的标准BNF或YACC语法?

但是下载链接不再起作用,我想问一下是否有人知道我现在可以在哪里下载它?

c++

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

标签 统计

haskell ×8

c++ ×2

ffi ×2

hsc2hs ×2

c2hs ×1

clang ×1

exception ×1

exception-handling ×1

g++ ×1

haxml ×1

io ×1

process ×1

system ×1

throw ×1

xml ×1