小编Sas*_* NF的帖子

奇怪的存在类型

http://www.iai.uni-bonn.de/~jv/mpc08.pdf - 在本文中我无法理解以下声明:

instance TreeLike CTree where
...
abs :: CTree a -> Tree a
improve :: (forall m. TreeLike m => m a) -> Tree a
improve m = abs m
Run Code Online (Sandbox Code Playgroud)
  1. 差异(forall m.TreeLike m => ma)带来了(我认为TreeLike m => ma就足够了)

  2. 为什么它允许abs在这里,如果m in ma可以是任何TreeLike,而不仅仅是CTree?

haskell existential-type

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

Haskell错误:无法将类型'a'与'b'匹配

我是Haskell的新手并拥有这段代码:

import Control.Monad

data NestedList a = Elem a | List [NestedList a] deriving (Show)

instance Monad NestedList where
    return a = List [Elem a]
    (List (Elem a: xs)) >>= f = let a' = f a in a' `joinLists` xs

func :: a -> NestedList a
func a = List ([Elem a] ++ [Elem a])

joinLists :: NestedList a -> [NestedList a] -> NestedList a
joinLists (List a) b = List (a ++ b)

main = do let a …
Run Code Online (Sandbox Code Playgroud)

haskell

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

路径归纳暗示

这是使路径归纳在Agda中起作用的后续问题

我想知道这个结构何时可能更具表现力.在我看来,我们总是这样表达:

f : forall {A} -> {x y : A} -> x == y -> "some type"
f refl = instance of "some type" for p == refl
Run Code Online (Sandbox Code Playgroud)

在这里,Agda将根据c : (x : A) -> C refl与该问题相同的示例进行路径归纳:

pathInd : forall {A} -> (C : {x y : A} -> x == y -> Set)
                     -> (c : (x : A) -> C refl)
                     -> {x y : A} -> (p : x == y) -> C …
Run Code Online (Sandbox Code Playgroud)

types agda

3
推荐指数
2
解决办法
195
查看次数

是否有标准的读者应用实例?

是否有一个已经存在的实例,就像我在这篇博文中找到的那样?

data Reader r a = Reader (r -> a)
instance Functor (Reader r) where
    fmap f (Reader x) = Reader (f . x)
instance Applicative (Reader r) where
    pure x = Reader $ pure x
    (Reader f) <*> (Reader x) = Reader (f <*> x)
Run Code Online (Sandbox Code Playgroud)

haskell

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

Haskell 如何推断类型类的定义?

所以我在玩 Haskell 并注意到一些让我困惑的事情。我定义了一个复杂的浮点数据结构,并想在它上面使用比较运算符。最初我这样做了,效果很好:

data Cplx = Cplx Float Float deriving (Eq, Show)

instance Ord Cplx where
  (<=) a b = (<=) (normCplx a) (normCplx b)
  (>=) a b = (>=) (normCplx a) (normCplx b)
  (<) a b = (<) (normCplx a) (normCplx b)
  (>) a b = (>) (normCplx a) (normCplx b)

normCplx :: Cplx -> Float
normCplx (Cplx a1 a2) = sqrt( a1^2 + a2^2)
Run Code Online (Sandbox Code Playgroud)

但我也注意到刚刚声明:

data Cplx = Cplx Float Float deriving (Eq, Show)

instance Ord Cplx where …
Run Code Online (Sandbox Code Playgroud)

haskell

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

多态返回类型

函数从字节流中读取ID.它知道id的大小 - 可以是4或8个字节.如何使返回类型多态?

(伪代码:)

    class (Integral a) => IdSize a where
      size :: a -> Int

    instance IdSize Int32 ...

    instance IdSize Int64 ...

    data Data = Data (Map (IdSize a) String)
    readData :: Data (Map (IdSize a) String)
    readId :: (forall a. IdSize a) => a -- kind of this, but not right
Run Code Online (Sandbox Code Playgroud)

这个readId需要来自调用者的IdSize实例,但调用者不知道大小.类似地,readData返回的Map需要是多态的,但调用者不知道实际的类型.使用Map的函数将知道该类型.

haskell parametric-polymorphism

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

`with fx` 匹配 `false`,但不能构造 `fx == false`

一段代码在这里:

-- transitivity
trans : {A : Set} {x y z : A} -> x == y -> y == z -> x == z
trans refl refl = refl

union-pair' : {A : Set} -> (m n : S {A}) -> (x : A) ->
                           (ismember (set-union (set-pair m n)) x) == (ismember (union m n) x)
union-pair' m n x with ismember m x | ismember n x | ismember (set-union (set-pair m n)) x
union-pair' : {A …
Run Code Online (Sandbox Code Playgroud)

agda

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