Просмотр исходного кода

move comparison into it's own module as well

Lucas Stadler лет назад: 11
Родитель
Сommit
2173b6f424
3 измененных файлов с 20 добавлено и 17 удалено
  1. 6 1
      elm/Post.elm
  2. 1 16
      elm/Stream.elm
  3. 13 0
      elm/Util/Compare.elm

+ 6 - 1
elm/Post.elm

@ -1,11 +1,16 @@
1 1
module Post where
2 2
3
import Date
3 4
import Date (Date)
4
import Util.Html (viewDate)
5 5
import Html (..)
6
import Util.Compare (compareBy, flipCompare)
7
import Util.Html (viewDate)
6 8
7 9
type alias Post = { title:String, content:String, created:Date }
8 10
11
compareByDate = compareBy (.created >> Date.toTime)
12
compareByDateReverse = flipCompare <| compareBy (.created >> Date.toTime)
13
9 14
view : Date -> Post -> Html
10 15
view ref post = div [] [
11 16
                 h3 [] [text post.title],

+ 1 - 16
elm/Stream.elm

@ -24,21 +24,6 @@ posts = [{title = "Something else", content = "Well, I can say more than \"Hello
24 24
         {title = "Ancient history", content = "Teenage angst!!!!", created = date "2009-06-07T02:54:29"}
25 25
        ]
26 26
27
flipOrder : Order -> Order
28
flipOrder o = case o of
29
                LT -> GT
30
                EQ -> EQ
31
                GT -> LT
32
33
flipCompare : (a -> a -> Order) -> a -> a -> Order
34
flipCompare compare' a b = flipOrder <| compare' a b
35
36
compareBy : (a -> comparable) -> a -> a -> Order
37
compareBy f a b = compare (f a) (f b)
38
39
sortByDate = List.sortBy (.created >> Date.toTime)
40
sortByDateReverse = List.sortWith (flipCompare <| compareBy (.created >> Date.toTime))
41
42 27
referenceDate = date "2015-03-01T14:09"
43 28
44
main = div [] (List.map (Post.view referenceDate) (sortByDateReverse posts))
29
main = div [] (List.map (Post.view referenceDate) (List.sortWith Post.compareByDateReverse posts))

+ 13 - 0
elm/Util/Compare.elm

@ -0,0 +1,13 @@
1
module Util.Compare where
2
3
flipOrder : Order -> Order
4
flipOrder o = case o of
5
                LT -> GT
6
                EQ -> EQ
7
                GT -> LT
8
9
flipCompare : (a -> a -> Order) -> a -> a -> Order
10
flipCompare compare' a b = flipOrder <| compare' a b
11
12
compareBy : (a -> comparable) -> a -> a -> Order
13
compareBy f a b = compare (f a) (f b)