Python 列表中的枚举可以写成zip [0..].我查看了Control.Lens.Traversal和Control.Lens.Indexed,但我无法弄清楚如何使用镜头将其概括为任何合理的容器(我犹豫说"Traversable").
我猜itraverse或是itraverseOf关键.
(在这一点上,这更像是一个我想知道如何解决的难题,而不是我希望在实践中使用的解决方案)
我正在尝试编写一个runDebug具有以下规范的函数:它的参数有类型IO (); 它的返回类型是(Monad m) => m (); 取决于它m,它表现为两种不同的方式之一; 如果MonadIO m,那么runDebug = liftIO,否则runDebug = const (return ()).
我试过的方法依赖于类型类
class MonadDebug m where
runDebug :: IO () -> m ()
Run Code Online (Sandbox Code Playgroud)
我尝试过使用MonadBase,我尝试过使用MonadIO重叠的实例,但是所有这些实例都遇到了歧义问题.
我想我可以通过为每个变换器编写实例来获得一些工作,但我一直希望避免这种情况.
假设我想引用最新提交的父级,其提交消息包含"foo".
HEAD^{/foo}^会做的.
这可以略微缩短为@^{/foo}^(我认为).
<rev>^{/<text>}尽管如此,结构还是简化了::/<text>.
有没有办法使用简短形式仍然可以引用生成的提交的父级?
我有一些代码使用类型消除实例的歧义(真正的代码使用GHC.TypeLits单例作为类型标签,但我不认为这是密切相关的)我想使用let绑定来避免文本级重复; 不幸的是,这使结果单形化.
以下是该问题的一个示例:
class Foo a where
foo :: a
instance Foo Int where
foo = 0
instance Foo Char where
foo = 'a'
data Bar a = Bar String
deriving (Show)
bar :: forall a. (Show a, Foo a) => a -> Bar a
bar _ = Bar $ show (foo :: a)
idInt :: Bar Int -> Bar Int
idInt = id
idChar :: Bar Char -> Bar Char
idChar = id
main = let quux = bar …Run Code Online (Sandbox Code Playgroud) 是否有一种好的/可接受的方式来获得两种以上的替代布局,特别是以支持可选空间的方式?
特别是,我可能想以三种方式之一打印列表:
[1, 2, 3, 4, 5]
[1,2,3,4,5]
[ 1
, 2
, 3
, 4
, 5
]
Run Code Online (Sandbox Code Playgroud)
按照优先顺序排列.
我有一个对象列表(例如,让我们说5).我想要一些可能的排列列表.具体来说,鉴于有些对不在一起,而有些三元组不能制作三明治,我怎样才能产生所有其他排列?我意识到我首先生成所有这些并检查它们是否有效,但我认为甚至不考虑不起作用的对和三元组会更快.
我错了,先检查并稍后生成会更快吗?
我该怎么办?
是否有可能在地图功能中有条件?
例如 :
map (> 0 < 100 )[1..10]
Run Code Online (Sandbox Code Playgroud)
如果不可能,那怎么能实现呢?
haskell ×5
git ×1
haskell-lens ×1
let ×1
map ×1
monomorphism ×1
polymorphism ×1
pretty-print ×1
python ×1