小编J. *_*son的帖子

为什么cabal会在.cabal/lib中安装已重新安装的软件包

我正在尝试使用CircleCI来构建一些Haskell项目.Circle /home/ubuntu/.cabal在每次构建后自动缓存目录,我认为这会加快构建速度,但它们似乎只需要很长时间 - 所有跳过的都是下载步骤.

我正在使用的构建指令是

cabal update
cabal install --only-dependencies --enable-tests
cabal configure --enable-tests
cabal build
cabal test
Run Code Online (Sandbox Code Playgroud)

我预计该install --only-dependencies步骤会看到缓存并运行得更快.

可能出了什么问题?

haskell cabal

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

没有应用程序的函数的示例

Functor没有Applicatives的好例子?好的,我正在寻找Const Void不需要诉求的非平凡(不)的例子undefined.如果没有,是否有任何方法可以证明那里的空间无趣?

这类似于不是Functor/Functor/Applicative/Monad的好例子?,但那里没有完全解决.

作为一个后续问题,是否有任何有趣的例子Functor可能会Applicative因为太多的非规范Applicative实例有意义而没有实例?例如,"扩展Maybe"有点无聊

data MayB a = Jus a | Nothing1 | Nothing2 | Nothing3 | ...

instance Applicative MayB where
  pure = Jus
  Jus f <*> Jus x = Jus (f x)
  Jus f <*> n     = n
  n     <*> Jus x = n
  n1    <*> n2    = methodOfResolvingNothingWhatsoever n1 n2
Run Code Online (Sandbox Code Playgroud)

是否存在实例变体Applicative更具实质性的示例?

haskell functor applicative

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

如何将文本重排为特定宽度?

在Emacs中,我非常习惯于M-q"智能地重排和重新缩进文本的当前块或区域以匹配所需的宽度".它实际上是一个非常复杂的命令,很难跨越文档中的语言和语义区域.

但是,最简单且最常用的版本只是在注释块中包装行.

VSCode是否存在这样的命令?你如何使用它?你是如何配置的?

visual-studio-code

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

unsafePerformIO和FFI库初始化

我正在为C中的库创建一个FFI模块,它希望在其他任何东西之前调用一次非重入函数.这个调用是幂等的,但是有状态的,所以我可以在每个Haskell调用中调用它.但它很慢并且由于不可重入而可能导致冲突.

那么这是使用unsafePerformIO的合适时机吗?我可以将Bool包装在一个不安全的IORef或MVar中,通过忽略后续调用(全局隐藏IORef状态为False的调用)使这些初始化调用成为幂等的.

如果没有,这样做的正确方法是什么?

c haskell ffi unsafe-perform-io

12
推荐指数
1
解决办法
305
查看次数

指称语义映射是否可判定?

对于我对这个问题的不良表达表示歉意,我不确定我是否有适当的词汇量.

我写了(最近)类似的东西

?let x = x in x? = ?
Run Code Online (Sandbox Code Playgroud)

但是我真的没有理解这里棘手的事情.我可以断言这句话是真的,? 因为我知道这是一个非生产性的无限循环.此外,我可以断言像

?let ones = 1:ones in ones? = ?(?x.(1,x)) = (1, (1, (1, ... )))
Run Code Online (Sandbox Code Playgroud)

但是什么进入了省略?据推测,它是无限数量的"一元组",如果你对AFA没问题,这是一个非常明确的数学对象,但我怎么能说服你,它不是一些有限数量的"一元组"然后是非生产性的?

显然,这涉及到解决停止问题,所以我不能一般.

那么在这种情况下,我们如何计算语义映射,就像它们是一个完整的函数一样?对于图灵不完整的语言,语义必然是不确定的吗?我想这意味着语义总是只是一种语言的近似,非正式的描述,但这个"洞"是否会更进一步?

haskell formal-semantics

12
推荐指数
1
解决办法
286
查看次数

Partiality Monad变压器

我试图将attadarsec中IResultmonad 解构为几块.这里的IResult

data IResult t r = Fail t [String] String
                 | Partial (t -> IResult t r)
                 | Done t r
Run Code Online (Sandbox Code Playgroud)

这感觉它应该是效果,"偏袒"和失败的组合.如果失败被表示为只是一个Either ([String], String)偏态可能

data Partiality t a = Now a | Later (t -> Partiality t a)

instance Monad (Partiality t) where
  return = pure
  (Now a) >>= f = f a
  (Later go) >>= f = Later $ \t -> go t >>= f

class MonadPartial t m where
  feed …
Run Code Online (Sandbox Code Playgroud)

monads haskell

11
推荐指数
1
解决办法
583
查看次数

Downsides to ScopedTypeVariables

有什么缺点ScopedTypeVariables,如果有的话?为什么不默认开启?它会导致更糟糕的推断吗?是否存在失败的边缘情况?在GHC中实施起来要困难得多吗?

haskell types ghc

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

标准的Haskell类型类有哪些法则可以维护?

众所周知,Monad实例应该遵循Monad法则.可能不太为人所知,Functor实例应遵循Functor法则.尽管如此,我仍然对编写优化的GHC重写规则感到相当自信fmap id == id.

还有哪些标准类有隐含法则?是否(==)有一个真正的等价关系?是否Ord必须形成部分订单?总订单?我们至少可以假设它是可传递的吗?反对称?

这些最后几个似乎没有在Haskell 2010报告中指定,也不会有信心编写利用它们的重写规则.但是,有没有共同的图书馆?一个实例的病理如何可以自信地写出来?

最后,假设这样一个实例可能存在一个边界,那么每种类型实例必须遵守的法律是否有一个标准的综合资源?


举个例子,我要定义多少麻烦

newtype Doh = Doh Bool
instance Eq Doh where a == (Doh b) = b
Run Code Online (Sandbox Code Playgroud)

它只是难以理解或编译器在任何地方都不正确地优化?

haskell interface proof

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

适当地铸造GADT

假设我正在编写DSL并希望支持幻像类型支持和严重类型化表达式.我的价值类型可能是

{-# LANGUAGE GADTs, DataKinds #-}

data Ty = Num | Bool deriving (Typeable)

data Val a where
  VNum  :: Int  -> Val Num
  VBool :: Bool -> Val Bool
Run Code Online (Sandbox Code Playgroud)

我可以使用幻影删除版本

{-# LANGUAGE ExistentialQuantification #-}

data Valunk = forall a . Valunk (V' a)
Run Code Online (Sandbox Code Playgroud)

现在,我可以对值进行操作Valunkcase荷兰国际集团出既VNumVBool,甚至以这种方式重新建立我的幻象类型

getNum :: Valunk -> Maybe (Val Num)
getNum (Valunk n@(VNum _)) = Just n
getNum _                   = Nothing
Run Code Online (Sandbox Code Playgroud)

但这只是感觉我正在重新实现Typeable机器.不幸的是,GHC不会让我得出一个TypeableVal

src/Types/Core.hs:97:13:
    Can't make …
Run Code Online (Sandbox Code Playgroud)

haskell existential-type gadt

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

异构列表中的单身人士

我想编写一个分析异构列表的函数.为了论证,我们有以下几点

data Rec rs where
  Nil :: Rec '[]
  Cons :: ty -> Rec rs -> Rec ( '(name, ty) ': rs )

class Analyze name ty where
  analyze :: Proxy name -> ty -> Int
Run Code Online (Sandbox Code Playgroud)

最终目标是编写如下内容

class AnalyzeRec rs where
  analyzeRec :: Rec rs -> [(String, Int)]

instance AnalyzeRec '[] where
  analyzeRec Nil = []

instance (Analyze name ty, AnalyzeRec rs) => 
           AnalyzeRec ( '(name, ty) ': rs ) 
  where
    analyzeRec (Cons hd tl) = 
      let proxy = Proxy …
Run Code Online (Sandbox Code Playgroud)

haskell dependent-type singleton-type data-kinds

9
推荐指数
2
解决办法
176
查看次数