019f8fd211
git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15c
git-subtree-split:24f5a642af
Change-Id: I6105b3762b79126b3488359c95978cadb3efa789
59 lines
1 KiB
Elm
59 lines
1 KiB
Elm
module Misc exposing (..)
|
|
|
|
import Array exposing (Array)
|
|
|
|
|
|
comesAfter : a -> List a -> Maybe a
|
|
comesAfter x xs =
|
|
case xs of
|
|
[] ->
|
|
Nothing
|
|
|
|
_ :: [] ->
|
|
Nothing
|
|
|
|
y :: z :: rest ->
|
|
if y == x then
|
|
Just z
|
|
|
|
else
|
|
comesAfter x (z :: rest)
|
|
|
|
|
|
comesBefore : a -> List a -> Maybe a
|
|
comesBefore x xs =
|
|
case xs of
|
|
[] ->
|
|
Nothing
|
|
|
|
_ :: [] ->
|
|
Nothing
|
|
|
|
y :: z :: rest ->
|
|
if z == x then
|
|
Just y
|
|
|
|
else
|
|
comesBefore x (z :: rest)
|
|
|
|
|
|
find : (a -> Bool) -> List a -> Maybe a
|
|
find pred xs =
|
|
case xs |> List.filter pred of
|
|
[] ->
|
|
Nothing
|
|
|
|
x :: _ ->
|
|
Just x
|
|
|
|
|
|
{-| Return the number of milliseconds that elapse during an interval in a
|
|
`target` bpm.
|
|
-}
|
|
bpmToMilliseconds : Int -> Int
|
|
bpmToMilliseconds target =
|
|
let
|
|
msPerMinute =
|
|
1000 * 60
|
|
in
|
|
round (toFloat msPerMinute / toFloat target)
|