我想实现此图像上显示的两个对齐之一:
.如果它使事情变得简单,CSS3就可以了,甚至更好.
我的主要问题是我设法将包含文本的一个div与按钮对齐,但文本本身与div的顶部对齐而不是底部.
在一个阶段中混合词法分析器和解析阶段有时会使Parsec解析器的可读性降低,但也会降低它们的速度.一种解决方案是使用Alex作为标记化器,然后使用Parsec作为标记流的解析器.
这很好但是如果我能摆脱Alex会更好,因为它在编译管道中添加了一个预处理阶段,与haskell"IDE"等没有很好地集成.我想知道是否有这样的事情用于描述标记器的haskell EDSL,非常符合Alex的风格,但是作为库.
Maybe/Either monad显着降低了速度.使用一些延续monad来处理错误会加快速度吗?有没有"内置延续monad"或"buitin error monad"这样的东西?内置我的意思是ST.
基准测试:
import Criterion.Main
unsafeDiv x 0 = error "division by zero"
unsafeDiv x y = x `div` y
safeDiv x 0 = Nothing
safeDiv x y = Just (x `div` y)
test1 :: Int -> [Int]
test1 n = map (n `unsafeDiv`) [n,n-1..1]
test2 :: Int -> Maybe [Int]
test2 n = mapM (n `safeDiv`) [n-1,n-2..0]
test3 :: Int -> Maybe [Int]
test3 n = test3' Just [n-1,n-2..0]
where test3' k [] = k []
test3' …Run Code Online (Sandbox Code Playgroud) 从Scala集合的设计中我理解如下:
scala> BitSet(1,2,3) map (_ + "a")
res7: scala.collection.immutable.Set[String] = Set(1a, 2a, 3a)
Run Code Online (Sandbox Code Playgroud)
不构建中间数据结构:新的Set是在使用Builder迭代BitSet时构建的.事实上,在这种情况下很明显,因为字符串的位组没有意义.
列表中的地图怎么样?我很确定以下内容构建了一个中间列表:
scala> List(1,2,3) map (_ -> "foo") toMap
res8: scala.collection.immutable.Map[Int,java.lang.String] =
Map(1 -> foo, 2 -> foo, 3 -> foo)
Run Code Online (Sandbox Code Playgroud)
即清单List((1,foo), (2,foo), (3,foo)).如果没有,那怎么样?现在,以下怎么样?
scala> Map.empty ++ (List(1,2,3) map (_ -> "foo"))
res10: scala.collection.immutable.Map[Int,java.lang.String] =
Map(1 -> foo, 2 -> foo, 3 -> foo)
Run Code Online (Sandbox Code Playgroud)
这一次,从我似乎从以下类型的理解++:
def ++ [B >: (A, B), That]
(that: TraversableOnce[B])
(implicit bf: CanBuildFrom[Map[A, B], B, That]): That
Run Code Online (Sandbox Code Playgroud)
我认为 …