hatayama
@hatayama has joined the channel
00000000004fb010 <Main_boolzuvar1_closure>: 4fb010: b8 c2 4b 00 00 mov $0x4bc2,%eax 4fb015: 00 00 add %al,(%rax) ... 00000000004fb018 <Main_zdtrModule3_closure>: 4fb018: f8 clc 4fb019: c2 4b 00 retq $0x4b 4fb01c: 00 00 add %al,(%rax) 4fb01e: 00 00 add %al,(%rax) 4fb020: 00 90 50 00 00 00 add %dl,0x50(%rax) ... 00000000004fb028 <Main_zdtrModule1_closure>: 4fb028: f8 clc 4fb029: c2 4b 00 retq $0x4b 4fb02c: 00 00 add %al,(%rax) 4fb02e: 00 00 add %al,(%rax)
\ の後に空白(改行を含む)を続けて再度 \ があるとそこの部分が無視されるのは知ってるんですが,終わりの \ も無いようですし
>>> :{
s = "a\
\b"
:}
>>> s
"ab"
>>> :{
s = "a\
b"
:}
<interactive>:8:3: error:
lexical error in string/character literal at character 'b'
buildMap :: (Ord key) => ([Maybe key], [Maybe val]) -> Maybe (Map key val) buildMap = \ case (Just k : ks, Just v : vs) -> Map.insert k v <$> buildMap (ks, vs) (Nothing : _, _) -> Nothing (_, Nothing : _) -> Nothing ([], []) -> Just (Map.empty) (_:ks, []) -> const (Map.empty) <$> buildMap (ks, []) (e@[], _:vs) -> asTypeOf (Map.empty) <$> buildMap ([], vs)
const Map.empty .... と、戻り値を必ず Map.empty にしてしまっているからではないかと。asTypeOf に変えたら通りましたし。const ではなく Map.union ではないでしょうか?再帰の基底部で必ず Map.empty を返してしまったら意味がないような...mkMap ([], vs) :: Maybe (Map k v) の k と mkMap :: Ord k => … の k が同じだということが分からないようなconst は a -> b -> a という型なので mkMap ([], vs) :: Maybe (Map k v) の k が Map.empty の型と同じとは限りませんが、Map.union (や、 asTypeOf )は戻り値も引数もすべて同じ型なのでわかる、ということではないでしょうか?ScopedTypeVariables の出番ですかね。 :smirk:forall を書き忘れるというミスを犯してませんか... (経験者談 :sweat_smile:
fromList :: Ord k => [(k,a)] -> Map k a
fromList xs
= foldlStrict ins empty xs
where
ins t (k,x) = insert k x t