小编aug*_*tss的帖子

如何将多态函数应用于动态值

是否有一种理智的方法将多态函数应用于类型的值Dynamic

例如,我有一个类型的值,Dynamic我想应用于Just内部的值Dynamic.因此,如果值是由toDyn True我希望结果构建的toDyn (Just True).内部可能出现的不同类型的数量Dynamic不受限制.

(当涉及的类型来自封闭的宇宙时,我有一个解决方案,但这是令人不快的.)

haskell types dynamic-typing

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

将单个记录字段更改为严格会导致性能下降

我有一个程序使用haskell-src-exts,并提高性能我决定严格记录字段.这导致了更糟糕的表现.

这是我正在改变的完整模块:

{-# LANGUAGE DeriveDataTypeable, BangPatterns #-}
module Cortex.Hackage.HaskellSrcExts.Language.Haskell.Exts.SrcSpan(
    SrcSpan, srcSpan, srcSpanFilename, srcSpanStartLine,
    srcSpanStartColumn, srcSpanEndLine, srcSpanEndColumn,
    ) where

import Control.DeepSeq
import Data.Data

data SrcSpan = SrcSpanX
    { srcSpanFilename    :: String
    , srcSpanStartLine   :: Int
    , srcSpanStartColumn :: Int
    , srcSpanEndLine     :: Int
    , srcSpanEndColumn   :: Int
    }
  deriving (Eq,Ord,Show,Typeable,Data)

srcSpan :: String -> Int -> Int -> Int -> Int -> SrcSpan
srcSpan fn !sl !sc !el !ec = SrcSpanX fn sl sc el ec

instance NFData SrcSpan …
Run Code Online (Sandbox Code Playgroud)

haskell

16
推荐指数
1
解决办法
526
查看次数

构造函数的通用和存在量词可以在模式匹配中交换吗?

这是我认为(类型)有意义的片段,但 ghc 不喜欢。我希望类型注释的一些巧妙使用可以使它起作用,但我的实验失败了。有什么建议?

{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Ex where

data T a where
  T :: Functor f => (f a -> a) -> T a

foo :: (forall a . T a) -> Bool
foo (T f) = bar f

bar :: Functor f => (forall a . f a -> a) -> Bool
bar _f = True
Run Code Online (Sandbox Code Playgroud)

这很可能是不可能的,因为它相当于交换一个普遍存在的量词,但我希望。

haskell

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

将类型作为Haskell中函数的参数传递?

以下两个功能非常相似.它们从[String] n元素中读取[Int]或[Float].如何计算公共代码?我不知道Haskell中支持将类型作为参数传递的任何机制.

readInts n stream = foldl next ([], stream) [1..n]
  where
    next (lst, x:xs) _ = (lst ++ [v], xs)
      where
        v = read x :: Int

readFloats n stream = foldl next ([], stream) [1..n]
  where
    next (lst, x:xs) _ = (lst ++ [v], xs)
      where
        v = read x :: Float
Run Code Online (Sandbox Code Playgroud)

我是Haskell的初学者级别,因此欢迎对我的代码发表任何评论.

haskell types

8
推荐指数
2
解决办法
3531
查看次数

无限列表开始重复时过滤

[Integer]在Haskell中创建一个序列.序列的数学定义是这样的,它重复一些正整数.在这种情况下,我想终止序列并确定有限列表的长度.

我尝试解决方案是首先从数学序列创建一个无限列表.然后我想过滤所有元素的列表,直到第一个元素重复.结果不应包括列表的重复头部.

我有两个问题/疑虑:

1)如何将列表的头部与列表中的元素匹配?2)这是解决我问题的有效方法吗?(如果需要,我稍后会添加更多关于确切序列的详细信息.现在我正在寻找一般性评论.)

haskell sequences list

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

在Haskell中解释这个'Merge'函数

我正在学习Haskell,我无法理解这个功能.我正在实施mergesort.我实现了mergesort递归函数,但我不明白这个'merge'函数在做什么.我理解命令式语言中的合并排序,但我不明白这里的语法.

merge []         ys                   = ys
merge xs         []                   = xs
merge xs@(x:xt) ys@(y:yt) | x <= y    = x : merge xt ys
                          | otherwise = y : merge xs yt
Run Code Online (Sandbox Code Playgroud)

sorting mergesort haskell

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

列表列表在haskell转90度

假设我有一个类型的列表列表:我可以旋转它(在某种意义上),以便:

[[a,b],    [[b,d],
 [c,d]] =>  [a,c]]
Run Code Online (Sandbox Code Playgroud)

对于任何尺寸列表?或者如果不可能为任意大小的列表只为6x6的大小列表

haskell

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

标签 统计

haskell ×7

types ×2

dynamic-typing ×1

list ×1

mergesort ×1

sequences ×1

sorting ×1