小编447*_*701的帖子

Idris依赖类型的限制

我一直在写Haskell一段时间,但想尝试使用Idris语言进行一些实验,并依赖打字.我玩了一下,并阅读了基本的文档,但是我想表达某种功能,并且不知道如何/是否可能.

以下是我想知道的是否可以表达的几个例子:

first:一个函数,它接受两个自然数,但只检查第一个是否小于另一个.所以f : Nat -> Nat -> whatevernat1小于nat2.这个想法是,如果一个像f 5 10它一样的调用,但如果我调用它就像f 10 5它将无法键入检查.

第二个:一个函数,它接受一个字符串和一个字符串列表,只有当第一个字符串在字符串列表中时才进行类型检查.

在伊德里斯这样的功能是否可行?如果是这样,你会如何实现一个简单的例子?谢谢!

编辑:

在多个用户的帮助下,编写了以下解决方案功能:

module Main

import Data.So

f : (n : Nat) -> (m : Nat) -> {auto isLT : So (n < m)} -> Int
f _ _ = 50

g : (x : String) -> (xs : List String) -> {auto inIt : So (elem x xs)} -> Int
g x xs = 52

main : IO () …
Run Code Online (Sandbox Code Playgroud)

haskell dependent-type idris

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

继承单身人士

快问.无论如何都要继承单例,以便子类是单例吗?我已经四处寻找,但我能找到的每一个单身都是按照课程实现的,而不是通用的.

c++ inheritance singleton

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

hiredis Redis库是否为异步回调创建自己的线程

我在多线程环境中使用Redis,并对其运行方式有疑问.我在我的c ++应用程序中使用hiredis c库.

我的问题是:如果我在触发回调时使用异步模式,那么回调是否会在Redis客户端创建的另一个线程中处理?因为创建调用的线程不会受到回调处理的影响吗?谢谢!

c c++ database redis

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

确保数据的正确性

我已经在Haskell编程了几个月了,我真的很享受它.我觉得我对monad,functor,pure等有了很好的把握.现在我已经使用了这个漂亮的类型系统了,因为它可以表达一些不正确的东西听起来对我来说太可怕了.Haskell允许您有时通过将数据属性移动到类型系统中来解决此问题.例如,使用GADT,您可以定义无法以不平衡方式构建的平衡树:

/sf/answers/1137604751/

因此,您保证在树上实现的任何功能都将生成正确的树.但在其他情况下,我看不出如何限制类型级别的数据.

这是我正在考虑的具体情况.我想表示一个图表,其中每个边指向一个存在的节点.因此,如果仅存在节点1-4,则无法定义到节点5的边.对于DAG样式图我知道这样的事情但是对于带有周期的图没有看到这样的东西.我该如何表达这样的话?

haskell types graph gadt

2
推荐指数
1
解决办法
90
查看次数

在类型类中键入变量

关于类型类,我有一个奇怪的问题.所以你可以像这样定义一个基本类型:

class Property x where
    checkThing :: x -> Int -> Bool
    transformThing :: x -> x
Run Code Online (Sandbox Code Playgroud)

如果要使用具有多个参数的类型类,可以启用:

{-# LANGUAGE MultiParamTypeClasses #-}
Run Code Online (Sandbox Code Playgroud)

这将让你做以下事情:

class Property x y where
    checkThing :: x -> Int -> Bool
    transformThing :: x -> y -> Int
Run Code Online (Sandbox Code Playgroud)

这是我的问题:想象一下,我想为自动机(可接受语言的那种)编写一个类型类.我会写一个看起来像这样的类型:

class Automata machine where
    isDeterministic :: machine -> Bool
    acceptsInput :: machine -> String -> Bool
Run Code Online (Sandbox Code Playgroud)

自动机接受输入并确定该输入是否是语言的一部分.上述课程适用于此.但等待这个仅限于字符列表(String)如果我想通过Automata进行推广呢?好吧,我可以在我的类定义中添加另一个变量:

class Automata machine alphabet where
    isDeterministic :: machine -> Bool
    acceptsInput :: machine -> [alphabet] -> Bool
Run Code Online (Sandbox Code Playgroud)

嗯那没关系.但字母表可能与机器没有直接关系.我很幸运!我可以启用:

{-# LANGUAGE …
Run Code Online (Sandbox Code Playgroud)

generics haskell types automata

0
推荐指数
1
解决办法
99
查看次数