相关疑难解决方法(0)

为什么不依赖键入?

我看到几个消息来源反映了"Haskell逐渐成为一种依赖型语言"的观点.暗示似乎是随着越来越多的语言扩展,Haskell正朝着这个方向漂移,但还没有.

基本上我想知道两件事.首先,很简单,"作为一种依赖型语言"究竟意味着什么?(希望没有太过技术性.)

第二个问题是......有什么缺点?我的意思是,人们知道我们正朝着这个方向前进,所以必须有一些优势.然而,我们还没有,所以必须有一些下行阻止人们一路走下去.我的印象是问题是复杂性急剧增加.但是,并不是真正了解依赖打字是什么,我不确定.

知道的是,每次我开始阅读一种依赖类型的编程语言时,文本都是完全不可理解的......大概这就是问题所在.(?)

haskell type-systems dependent-type

159
推荐指数
4
解决办法
1万
查看次数

Agda中有限集的定义

我是Agda的新手.我正在阅读Ana Bove和Peter Dybjer的论文"工作中的依赖类型".我不理解有限集的讨论(在我的副本中的第15页).

本文定义了一种Fin类型:

data Fin : Nat -> Set where
    fzero : {n : Nat} -> Fin (succ n)
    fsucc : {n : Nat} -> Fin n -> Fin (succ n)
Run Code Online (Sandbox Code Playgroud)

我一定错过了一些明显的东西.我不明白这个定义是如何工作的.有人可以简单地将定义翻译Fin成日常英语吗?这可能是我需要理解本文的这一部分.

感谢您抽出宝贵时间阅读我的问题.我很感激.

agda

19
推荐指数
1
解决办法
1563
查看次数

为什么类型系统拒绝我看似有效的程序?

记住这个计划:

class Convert a b where
    convert :: a -> b

data A = A deriving Show
data B = B deriving Show
data C = C deriving Show
data D = DA A | DB B | DC C deriving Show

instance Convert A A where convert A = A
instance Convert A B where convert A = B
instance Convert A C where convert A = C
instance Convert B A where convert B = A
instance Convert …
Run Code Online (Sandbox Code Playgroud)

haskell types functional-programming type-conversion

18
推荐指数
2
解决办法
2813
查看次数

如何构建具有依赖类型长度的列表?

把我的脚趾浸入依赖类型的水域,我在规范的"静态类型长度列表"示例中有一个裂缝.

{-# LANGUAGE DataKinds, GADTs, KindSignatures #-}

-- a kind declaration
data Nat = Z | S Nat

data SafeList :: (Nat -> * -> *) where
    Nil :: SafeList Z a
    Cons :: a -> SafeList n a -> SafeList (S n) a

-- the type signature ensures that the input list has at least one element
safeHead :: SafeList (S n) a -> a
safeHead (Cons x xs) = x
Run Code Online (Sandbox Code Playgroud)

这似乎有效:

ghci> :t Cons 5 (Cons 3 Nil) …
Run Code Online (Sandbox Code Playgroud)

haskell dependent-type

13
推荐指数
2
解决办法
548
查看次数

有人可以用*非常*简单的术语解释反射包API吗?

我很难理解描述反射包的文档/示例。我是命令式编程的老手,但还是 Haskell 新手。你能带我做一个非常简单的介绍吗?

包:https : //hackage.haskell.org/package/reflection

编辑:致关闭这个问题的人:这是对 Haskell 反射的初学者介绍。下面的答案很好,其他的也很有用,所以请重新打开。

reflection proxy haskell reify

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

有限数字如何工作?(依赖类型)

我对依赖类型语言感兴趣.有限数字对我来说似乎非常有用.例如,安全地索引固定大小的数组.但这个定义对我来说并不清楚.

Idris中有限数字的数据类型如下:(并且在Agda中可能类似)

data FiniteNum : Natural -> Type where
  FZero : FiniteNum (Succ k)
  FSucc : FiniteNum k -> FiniteNum (Succ k)
Run Code Online (Sandbox Code Playgroud)

它似乎工作:

exampleFN : FiniteNum (Succ (Succ Zero))
exampleFN = FSucc FZero -- typechecks
-- exampleFN = FSucc (FSucc FZero)  -- won't typecheck
Run Code Online (Sandbox Code Playgroud)

但这是如何工作的?k是什么意思?为什么类型检查器接受第一个实现并拒绝第二个?

agda dependent-type idris

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

从静态配置迁移到动态配置

我正在开发一个haskell项目,其中设置当前在一个名为的文件中Setting.hs,因此它们在编译期间被检查并可以全局访问.

但是,由于这有点太静态,我正在考虑在运行时读取配置.代码库是巨大的,似乎将相当大的努力传递给整个程序流程中的参数,例如作为参数,因为它们可以从任何地方任意访问.

是否有任何设计模式,库甚至ghc扩展可以在不重构整个代码的情况下提供帮助?

haskell configuration-files

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