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