compress [email protected](_:_:_) = (ifte <$> ((==) <$> head <*> head.tail) <$> ((compress.).(:) <$> head <*> tail.tail) <*> ((:) <$> head <*> compress.tail)) xs
爲什麼不這種類型檢測?
結果在類型錯誤,但我不明白爲什麼。它應該是相當於
compress [email protected](_:_:_) = (ifte (((==) <$> head <*> head.tail) xs) (((compress.).(:) <$> head <*> tail.tail) xs) (((:) <$> head <*> compress.tail) xs))
,這沒有。
備註:ifte = (\ x y z -> if x then y else z)
,<$>
和<*>
均來自Control.Applicative
。
編輯:的錯誤是:
Couldn't match expected type `[a]' with actual type `[a] -> [a]'
In the expression:
(ifte <$> ((==) <$> head <*> head . tail)
<$>
((compress .) . (:) <$> head <*> tail . tail)
<*>
((:) <$> head <*> compress . tail))
$ xs
In an equation for `compress':
compress [email protected](_ : _ : _)
= (ifte <$> ((==) <$> head <*> head . tail)
<$>
((compress .) . (:) <$> head <*> tail . tail)
<*>
((:) <$> head <*> compress . tail))
$ xs
我遇到這個問題想寫一個pointfree解決Ninety-Nine Haskell Problems的問題8。我試圖通過修改貼題的解決方案我寫,這是
compress::Eq a => [a]->[a]
compress [] = []
compress (x:[]) = (x:[])
compress (x:y:xs) = ifte ((==) x y) (compress (x:xs)) (x:(compress (y:xs)))
能否請您粘貼類型的錯誤,也許是代碼的少點的版本? – fuz
對不起。你給我們提供了大量的無意義和不透明的代碼來解密,甚至沒有提到代碼的目的或任何細節,比如你得到的確切錯誤。我們應該如何幫助你? -1。 – fuz
-1。這是一個典型的情況,需要喝一杯水,並且想一個人真正在做什麼。 – Tarrasch