LoginSignup
1

More than 5 years have passed since last update.

haskellで書いてみた

Posted at

haskellで何か書いてみる練習。
iPhoneの画素情報の構造体のリストを計算してみる。
正しい記述なのかは不明。データ型の使い方を覚えた。

pixel.hs
{-

画素計算します。
多くのコードは以下を参照しています。
  http://walk.wgag.net/haskell/higherorder.html
-}

-- module PixelModule where

main = do { 
            print (map (name) (qsort iphones ++ ipads));
          }

type PixelSize = (Integer, Integer)

production ::  PixelSize -> Integer
production (x, y) = x * y

svga :: PixelSize
svga = (800,600)
fullHD = (1920,1080)



data DeviceInfo = DeviceInfo { name :: String, pixelSize :: PixelSize, retina :: Integer } deriving Show

iphone3 = DeviceInfo { name = "iphone3", pixelSize = (320, 480) , retina = 1 }
iphone4 = DeviceInfo { name = "iphone4", pixelSize = (640, 960) , retina = 2 }
iphone5 = DeviceInfo { name = "iphone5", pixelSize = (640, 1136) , retina = 2 }
iphone6 = DeviceInfo { name = "iphone6", pixelSize = (750, 1334) , retina = 2 }
iphone6p = DeviceInfo { name = "iphone6p", pixelSize = (1242, 2208) , retina = 3 }
ipad = DeviceInfo { name = "ipad", pixelSize = (768, 1024) , retina = 1 }
ipadair = DeviceInfo { name = "ipadair", pixelSize = (1536, 2048) , retina = 2 }
ipadpro = DeviceInfo { name = "ipadpro", pixelSize = (2048, 2732) , retina = 2 }


iphones = [iphone4, iphone5, iphone6, iphone6p, iphone3]
ipads = [ipad, ipadair, ipadpro]

size :: DeviceInfo -> Integer 
size  = production.pixelSize 





qsort :: [DeviceInfo] -> [DeviceInfo]
qsort [] = []
qsort (p:xs) = qsort lt ++ [p] ++ qsort gteq
                     where
                        lt = [x | x <- xs, size x < size p]
                        gteq = [x | x <- xs, size x >= size p]

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1