android:gravity="center"
работает только с RelativeLayouts. Так что попробуйте
<TextView
android:id="@+id/title"
android:layout_width="fill_parent" <!--relative Layout-->
android:layout_height="wrap_content"
android:gravity="center"
android:text="Mint Payments"/>
Вы можете использовать -Werror
, чтобы превратить предупреждения в ошибки. Я не знаю, можете ли вы превратить только предупреждения неисчерпывающих шаблонов в ошибки, извините!
Что касается третьей части вашего вопроса:
Я иногда пишу ряд функций, которые как правило, тесно сотрудничают и имеют свойства, которые вы не можете легко выразить в Haskell. По крайней мере, некоторые из этих функций имеют тенденцию иметь неисчерпывающий характер, обычно это «потребители». Это происходит, например, в функциях, которые являются своего рода инверсиями друг друга.
Пример игрушки:
duplicate :: [a] -> [a]
duplicate [] = []
duplicate (x:xs) = x : x : (duplicate xs)
removeDuplicates :: Eq a => [a] -> [a]
removeDuplicates [] = []
removeDuplicates (x:y:xs) | x == y = x : removeDuplicates xs
Теперь довольно легко увидеть, что removeDuplicates (duplicate as)
равно as
(всякий раз, когда тип элемента находится в Eq
), но в целом duplicate (removeDuplicates bs)
завершится сбоем, потому что есть нечетное количество элементов или 2 последовательных элемента отличаются. Если он не падает, это потому, что bs
был создан (или мог быть создан) duplicate
в первую очередь !.
Итак, у нас есть следующие законы (не действует на Haskell):
removeDuplicates . duplicate == id
duplicate . removeDuplicates == id (for values in the range of duplicate)
Теперь, если вы хотите предотвратить неисчерпывающие паттерны здесь, вы можете заставить removeDuplicates
возвращать Maybe [a]
или добавить сообщения об ошибках для пропущенных случаев. Вы могли бы даже сделать что-то вроде
newtype DuplicatedList a = DuplicatedList [a]
duplicate :: [a] -> DuplicatedList a
removeDuplicates :: Eq a => DuplicatedList a -> [a]
-- implementations omitted
Все это необходимо, потому что вы не можете легко выразить «быть списком четной длины с последовательными равными парами элементов» в типе Haskell system (если вы не Олег:)
Но если вы не экспортируете removeDuplicates
, я думаю, что вполне нормально использовать здесь неисчерпывающие шаблоны. Как только вы его экспортируете, вы потеряете контроль над входными данными и будете иметь дело с отсутствующими случаями!