小编Ant*_*ton的帖子

封闭型系列和奇怪的功能类型

对不起,我无法想象这个问题有更好的标题,所以请提前阅读.想象一下,我们有一个封闭类型的族,它将每种类型映射到Maybe除了maybes之外的相应类型:

type family Family x where
  Family (Maybe x) = Maybe x
  Family x = Maybe x
Run Code Online (Sandbox Code Playgroud)

我们甚至可以使用该类型族声明一个函数:

doMagic :: a -> Family a
doMagic = undefined

exampleA = doMagic $ Just ()
exampleB = doMagic $ ()
Run Code Online (Sandbox Code Playgroud)

在GHCi中使用它表明可以评估此​​函数应用程序的类型:

*Strange> :t exampleA      
exampleA :: Maybe ()       
*Strange> :t exampleB      
exampleB :: Maybe ()       
Run Code Online (Sandbox Code Playgroud)

问题是,是否有可能提供该doMagic功能的任何实现除外undefined?举个例子说我想把每个值都包装成一个Just构造函数,除了Maybes应该保持原样,我怎么能这样做呢?我尝试使用类型类,但如果不使用封闭类型系列,则无法为doMagic函数编写可编译签名,有人可以帮助我吗?

haskell type-families

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

是否有各种运行时C++汇编程序库?

对于我的小爱好项目,我需要在运行时从C++程序中发出机器代码.我有基地址0xDEADBEEF,想写这样的东西:

Assembler a((void*)0xDEADBEEF);
a.Emit() << 
  Push(Reg::Eax) <<
  Push(Reg::Ebx) <<
  Jmp(0xFEFEFEFE);
Run Code Online (Sandbox Code Playgroud)

内联汇编程序不是我的选择,因为生成的机器代码取决于程序状态.

有人知道任何现有的库吗?如果不是,从头开发并使其成为开源是否是一个好主意?(我的意思是,如果它存在,有人会使用这个库吗?)

c++ assembly runtime reflection.emit

7
推荐指数
2
解决办法
2579
查看次数

我可以让Stack使用我修补的Cabal库吗?

有没有人知道是否有一种简单的方法可以使Stack从我的GitHub存储库中使用特定的修补版本的Cabal库?我很高兴我如何使用其他软件包的分叉版本,只需将它们放入packages:部分stack.yaml,但这似乎不适用于Cabal.

我想要的是指定git存储库URL和修订版的一些方法,stack.yaml并从该源构建Cabal库,而不是从Hackage或任何上游存储库构建.这可以吗?

haskell haskell-stack

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

特化未使用的类型变量时不可触及的类型

我正在为我的 haskell 程序创建一个 eDSL,它允许定义一组指令来存储数据。这些指令可能会相互依赖结果,甚至被序列化为文件以进一步恢复。这是我想出的东西(相当冗长,但这是我可以提取的最少代码量来重现我的问题):

{-# LANGUAGE TypeFamilies, RankNTypes, ExistentialQuantification, FlexibleContexts #-}
module Untouchable where

import Control.Applicative
import Control.Monad.Writer
import System.Random

class ResultClass e where
  type ResultMonad :: * -> *
  statementAResult :: ResultMonad (e Int)
  literalResult    :: a -> ResultMonad (e a)

data Statement result = StatementA | StatementB (result Int)
data StatementWithResult result t = StatementWithResult (Statement result, result t)
data AnyStatementWithResult result = forall t. AnyStatementWithResult (StatementWithResult result     t)
type Program result a = (ResultClass result, ResultMonad ~ …
Run Code Online (Sandbox Code Playgroud)

haskell compiler-errors type-families

3
推荐指数
1
解决办法
394
查看次数